screenscrot 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []