screenscrot 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: bc37a5ede10e26e8da5d5cceba93a4b2d15a15d9ccfae80bd7ad363e300a9a22
4
+ data.tar.gz: d512bd19e7dc9820084cf1615410639e150240af95a7489f5c1dd3bd0f459f6f
5
+ SHA512:
6
+ metadata.gz: bdbf0d667085956c51e4d27d5df623c4f1041d72d4fa2472af04187a9b8c76d73db7a8b06886d2940af54bb51dc5e7c2d3d3f643edb5974085703e1d8c0e4345
7
+ data.tar.gz: f94a5a1e69b16c1870c88b4cc3ede26077e3bd2be9b0b1f9c2d67187c513ee6a7b31e10f61725dee210cb23c616694340f652b3a7f843b9f3c722e996c5fc73a
data/bin/screenscrot ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/screenscrot'
5
+
6
+ puts 'Start Recording Screenshots...'
7
+
8
+ ScreenScrot.setup do |screen|
9
+ screen.title = ARGV[1] || 'ScreenScrot'
10
+ screen.ext = 'png'
11
+ screen.path = Dir.pwd
12
+ end
13
+
14
+ @screen = ScreenScrot.new(ScreenScrot.title)
15
+
16
+ system 'clear'
17
+
18
+ cnt = 5
19
+ cnt.times do
20
+ puts "Starting in #{cnt -= 1}"
21
+ sleep 1
22
+ system 'clear'
23
+ end
24
+
25
+ puts '[Screenshot Recording Started]'
26
+
27
+ str_time = Time.now
28
+ max_time = ARGV[0].to_i unless ARGV.empty?
29
+
30
+ display = ARGV.include?('--all') ? :all : :active
31
+ display = '--select' if ARGV.include?('--select')
32
+
33
+ until (Time.now - str_time).to_i >= max_time
34
+ @screen.capture(display)
35
+ sleep 0.5
36
+ end
37
+
38
+ print '[Screenshot Recording Stopped] after '
39
+ puts "#{(Time.now - str_time).to_f.round(2)} seconds"
40
+ puts "Captured frames -> [#{@screen.frames}]"
41
+ puts ' > making GIF animation...'
42
+
43
+ @screen.to_gif
44
+
45
+ print "[GIF CREATED!] - File saved as #{@screen.title}.gif in #{@screen.directory}"
46
+ puts
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ScreenScrot
4
+ VERSION = '0.1.0'
5
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'screenscrot/version'
4
+
5
+ ##
6
+ # Capture screenshots with SCROT and create .gif animation
7
+ #
8
+ class ScreenScrot
9
+ attr_accessor :title, :ext, :path, :directory, :frames
10
+
11
+ alias extension ext
12
+ alias dir directory
13
+
14
+ ##
15
+ # Set default configuration for title, image extension and path directory.
16
+ #
17
+ class << self
18
+ attr_accessor :title, :path, :ext
19
+
20
+ def configure
21
+ init
22
+ yield(ScreenScrot) if block_given?
23
+ return true if title && path && ext
24
+
25
+ false
26
+ end
27
+
28
+ alias config configure
29
+ alias setup configure
30
+
31
+ private
32
+
33
+ def init
34
+ @title ||= 'ScreenScrot'
35
+ @path ||= Dir.pwd
36
+ @ext ||= 'png'
37
+ true
38
+ end
39
+ end
40
+
41
+ ##
42
+ # @example
43
+ # screen = ScreenScrot.new 'title', 'path_to_dir', 'image_extension'
44
+ # @return [ScreenScrot] ScreenScrot instance object.
45
+ #
46
+ def initialize(title = nil, path = nil, ext = nil)
47
+ ScreenScrot.configure
48
+ @frames = 0
49
+ @title = title || ScreenScrot.title
50
+ @path = path || ScreenScrot.path
51
+ @ext = ext || ScreenScrot.ext
52
+ [@title, @path, @ext].select do |type|
53
+ raise 'Configuration data must be string!' unless type.is_a?(String)
54
+ end
55
+ @path += '/' unless @path.end_with?('/')
56
+ @filename = "#{@title}_#{rand(999)}"
57
+ @directory = "#{@path}#{@filename}/"
58
+ system "mkdir -p #{@directory}" unless Dir.exist?(@directory)
59
+ Dir.chdir(@directory)
60
+ end
61
+
62
+ ##
63
+ # Capture screenshot with `SCROT`
64
+ #
65
+ # @example Capture active window (default)
66
+ # screen.capture
67
+ #
68
+ # @example Capture all screen
69
+ # screen.capture :all
70
+ #
71
+ # @example Capture selected with mouse
72
+ # screen.capture :select
73
+ #
74
+ def capture(win = :active, quality: 75)
75
+ scr = case win.to_sym
76
+ when :all
77
+ '' # rec everything
78
+ when :select
79
+ '-s' # select with mouse
80
+ else
81
+ '-u' # active window (default)
82
+ end
83
+ screenshot = @directory + Time.now.to_f.to_s.gsub!('.', '')
84
+ exec = "scrot #{scr} -q #{quality} #{screenshot + @frames.to_s}.#{@ext}"
85
+ system exec
86
+ # captured frames counter
87
+ @frames += 1
88
+ end
89
+
90
+ def to_gif(title = nil, opts = {})
91
+ title ||= @filename
92
+ opts[:dir] ||= @directory
93
+ opts[:ext] ||= @ext
94
+ opts[:delay] ||= 20
95
+ opts[:loop] ||= 2
96
+ Dir.chdir(opts[:dir])
97
+ title += '.gif' unless title.end_with? '.gif'
98
+ exec = "convert -delay #{opts[:delay]} -loop #{opts[:loop]} *.#{opts[:ext]} #{title}"
99
+ system exec
100
+ rescue StandardError
101
+ false
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: screenscrot
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alx3Dev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-01-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.14.1
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.14.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 13.0.1
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 13.0.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.10.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.10.0
55
+ description: |
56
+ Get screenshots with Scrot, and convert into GIF. Simple terminal
57
+ recording with Ruby and Scrot.
58
+ email: alx3dev@gmail.com
59
+ executables:
60
+ - screenscrot
61
+ extensions: []
62
+ extra_rdoc_files: []
63
+ files:
64
+ - bin/screenscrot
65
+ - lib/screenscrot.rb
66
+ - lib/screenscrot/version.rb
67
+ homepage: https://www.github.com/alx3dev/screenscrot
68
+ licenses:
69
+ - MIT
70
+ metadata:
71
+ homepage_uri: https://www.github.com/alx3dev/screenscrot
72
+ source_code_uri: https://www.github.com/alx3dev/screenscrot
73
+ changelog_uri: https://www.github.com/alx3dev/screenscrot/CHANGELOG.md
74
+ documentation_uri: https://rubygems.info/gems/screenscrot/0.1.0
75
+ rubygems_mfa_required: 'true'
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 2.6.0
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubygems_version: 3.3.6
92
+ signing_key:
93
+ specification_version: 4
94
+ summary: Terminal to GIF recording with Ruby and Scrot.
95
+ test_files: []