filechooser 0.0.1

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
+ SHA1:
3
+ metadata.gz: 7ab50c144e898996401934e203774d7dbc4c0397
4
+ data.tar.gz: ca4de6ed9cab62c6ae53f3b6338c2bc67b6fe1d0
5
+ SHA512:
6
+ metadata.gz: e6e63c469980b0933ffdb80e9aa4bf75f26ccdc68d82d25bbf3506d79a193de1490ca957290c68a5dba0d6be5a5d803807df94bd0e838f772dceba8cd86b9fa1
7
+ data.tar.gz: 8ea80274bb24c7a1da553f3703a450a1883359d351cdf11f6ff791da01378f79bc56cbca6136cd420bea979ef0679d2f280be2dead8bb0a8cf7980a2748fd51d
data/bin/dirchooser ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "filechooser"
4
+
5
+
6
+ puts '"'+Filechooser.dirchooser+'"'
data/bin/filechooser ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "filechooser"
4
+
5
+
6
+ puts '"'+Filechooser.filechooser+'"'
@@ -0,0 +1,164 @@
1
+ # require 'pathname'
2
+
3
+ module Filechooser
4
+
5
+ def self.dirchooser
6
+ p0 = Pathname.new(STARTFOLDER)
7
+ while true
8
+ Highline.cli.say("Current Directory: #{p0}".style(":info"))
9
+ sd=p0.children.select(&:directory?).length
10
+ f=p0.children.select(&:file?).length
11
+ Highline.cli.say("(#{sd} directories, #{f} files)".style(":info"))
12
+ choices= "(C)hoose (D)own (U)p (N)ew E(x)it ? "
13
+ answer = Highline.cli.ask(choices.style(":ask_line")) {|q| q.character = true}
14
+ case answer
15
+ when /[cC]/ then return p0.to_s
16
+ when /[xX]/ then return ''
17
+ when /[dD]/ then Highline.cli.say("Subdirectories of #{p0}:".style(":info"))
18
+ uvz=choose_uvz(p0)
19
+ if uvz==''
20
+ Highline.cli.say("No subdirectories found.".style(":warning"))
21
+ else
22
+ uvz=File.expand_path(uvz,p0)
23
+ uvz=Pathname.new(uvz)
24
+ p0=uvz
25
+ end
26
+ when /[nN]/ then name=Highline.cli.ask("Name of new directory? ".style(":ask_line"))
27
+ if name.verboten?
28
+ Highline.cli.say("Name contains deprecated characters. Aborted.".style(":warning"))
29
+ else
30
+ begin
31
+ Dir.chdir(p0) do
32
+ if File.directory?(name)
33
+ Highline.cli.say("Directory already exists.".style(":warning"))
34
+ else
35
+ Dir.mkdir(name)
36
+ end
37
+ end
38
+ uvz=File.expand_path(name,p0)
39
+ uvz=Pathname.new(uvz)
40
+ p0=uvz
41
+ rescue
42
+ Highline.cli.say("Error: Could not create directory.".style(":warning"))
43
+ end
44
+ end
45
+ when /[uU]/ then p0=p0.parent
46
+ end
47
+ end
48
+
49
+ end
50
+
51
+
52
+ def self.filechooser
53
+ p0 = Pathname.new(STARTFOLDER)
54
+ while true
55
+ Highline.cli.say("Current Directory: #{p0}".style(":info"))
56
+ sd=p0.children.select(&:directory?).length
57
+ f=p0.children.select(&:file?).length
58
+ Highline.cli.say("(#{sd} directories, #{f} files)".style(":info"))
59
+ choices= "(C)hoose (D)own (U)p (N)ew E(x)it ? "
60
+ answer = Highline.cli.ask(choices.style(":ask_line")) {|q| q.character = true}
61
+ case answer
62
+ when /[cC]/ then Highline.cli.say("Files of #{p0}:".style(":info"))
63
+ datei=choose_datei(p0)
64
+ if datei==''
65
+ Highline.cli.say("No files found.".style(":warning"))
66
+ elsif datei==NO_CHOICE
67
+ # Do nothing
68
+ else
69
+ datei=File.expand_path(datei,p0)
70
+ datei=Pathname.new(datei)
71
+ return datei.to_s
72
+ end
73
+ when /[xX]/ then return ''
74
+ when /[dD]/ then Highline.cli.say("Subdirectories of #{p0}:".style(":info"))
75
+ uvz=choose_uvz(p0)
76
+ if uvz==''
77
+ Highline.cli.say("No subdirectories found.".style(":warning"))
78
+ else
79
+ uvz=File.expand_path(uvz,p0)
80
+ uvz=Pathname.new(uvz)
81
+ p0=uvz
82
+ end
83
+ when /[nN]/ then name=Highline.cli.ask("Name of new file? ".style(":ask_line"))
84
+ if name.verboten?
85
+ Highline.cli.say("Name contains deprecated characters. Aborted.".style(":warning"))
86
+ else
87
+ begin
88
+ Dir.chdir(p0) do
89
+ if File.file?(name)
90
+ Highline.cli.say("File already exists.".style(":warning"))
91
+ else
92
+ if permission_given("Create and choose file '#{name}'")
93
+ File.open(name,"a")
94
+ datei=File.expand_path(name,p0)
95
+ datei=Pathname.new(datei)
96
+ return datei
97
+ end
98
+ end
99
+ end
100
+ rescue
101
+ Highline.cli.say("Error: Could not create file.".style(":warning"))
102
+ end
103
+ end
104
+ when /[uU]/ then p0=p0.parent
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+
111
+ def self.choose_uvz(vz) # returns chosen subdirectory of vz
112
+ a=unterverzeichnisse(vz)
113
+ return '' if a==[]
114
+ Highline.cli.choose do |menu|
115
+ menu.prompt = "Your Choice? "
116
+ a.each {|s| menu.choice(s) { return s } }
117
+ end
118
+ end
119
+
120
+ def self.choose_datei(vz) # returns chosen file of vz
121
+ a=dateien(vz)
122
+ return '' if a==[]
123
+ a << NO_CHOICE
124
+ Highline.cli.choose do |menu|
125
+ menu.prompt = "Your Choice? "
126
+ a.each {|s| menu.choice(s) { return s } }
127
+ end
128
+ end
129
+
130
+
131
+
132
+ def self.unterverzeichnisse(vz) # Array with all direct subdirectories of vz, no hidden ones
133
+ uvz=[]
134
+ begin
135
+ Dir.chdir(vz) do
136
+ Dir['*/'].each { |sd| uvz << sd.chop} # sd comes with / at the end
137
+ end
138
+ rescue
139
+ Highline.cli.say("Error: Could not enter directory.".style(":warning"))
140
+ end
141
+ return uvz.sort
142
+ end
143
+
144
+ def self.dateien(vz) # Array with all regular files of vz, no hidden ones
145
+ rf=[]
146
+ begin
147
+ Dir.chdir(vz) do
148
+ Dir['*'].each { |sd| rf << sd if File.file?(sd)}
149
+ end
150
+ rescue
151
+ Highline.cli.say("Error: Could not enter directory.".style(":warning"))
152
+ end
153
+ return rf.sort
154
+ end
155
+
156
+
157
+ def self.permission_given(wofuer) # true = yes = permission given
158
+ (Highline.cli.ask("#{wofuer}? (Yn) ".style(":ask_line")) do |q| q.character = true end).downcase=='y'
159
+ end
160
+
161
+
162
+
163
+ end
164
+
@@ -0,0 +1,48 @@
1
+ # require 'highline'
2
+
3
+ module Filechooser
4
+
5
+ module Highline
6
+ @@cli=nil
7
+
8
+ class ::String
9
+ def style(st) # to simplify the use of Highline Color Scheme ( " in string st is being protected)
10
+ a="<%= color(\""
11
+ b=self.gsub('"','\"')
12
+ c="\""+", #{st})%>"
13
+ return a+b+c
14
+ end
15
+ end
16
+
17
+ private_class_method def self.set_highline_color_scheme
18
+ ft = HighLine::ColorScheme.new { |cs|
19
+ cs[:warning] = [ :bold, :red ]
20
+ cs[:info] = [ :green ]
21
+ cs[:koralle] = [ :rgb_f08080]
22
+ cs[:yellow1] = [ :rgb_ffcc33]
23
+ cs[:rosybrown1] = [ :rgb_ffc1c1]
24
+ cs[:rosybrown3] = [ :rgb_cd9b9b]
25
+ cs[:slategray1] = [ :rgb_c6e2ff]
26
+ cs[:help] = [ :slategray1 ]
27
+ cs[:ask_line] = [ :koralle ]
28
+ cs[:headline] = [ :yellow, :underline ]
29
+ cs[:row_odd] = [ :rosybrown1]
30
+ cs[:row_even] = [ :rosybrown3]
31
+ cs[:lightblue] = [ :rgb_00ffff]
32
+ }
33
+ HighLine.color_scheme = ft
34
+ end
35
+
36
+ def self.cli
37
+ @@cli
38
+ end
39
+
40
+ def self.init
41
+ @@cli = HighLine.new
42
+ set_highline_color_scheme
43
+ end
44
+ end
45
+
46
+ end
47
+
48
+ # Usage im Modul Filechooser: Highline.cli.say("String".style(":help"))
@@ -0,0 +1,15 @@
1
+ module Filechooser
2
+
3
+ class ::String
4
+
5
+ VERBOTENE_ZEICHEN=%w[< > : " \\ / | * ? [ ] = % $ + , ;] # \ must be protected, therefore \\!
6
+
7
+ def verboten?
8
+ VERBOTENE_ZEICHEN.each{|z| return true if self.index(z)}
9
+ return false
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+
@@ -0,0 +1,24 @@
1
+ '''
2
+ command line version of a file or directory chooser like
3
+ Gtk::FileChooserDialog
4
+
5
+ '''
6
+
7
+ $:.unshift __dir__ unless $LOAD_PATH.include? __dir__
8
+
9
+ require 'pathname' # ruby standard lib
10
+
11
+ require 'highline'
12
+
13
+
14
+ require 'filechooser/string-class'
15
+ require 'filechooser/highline-module'
16
+ require 'filechooser/api'
17
+
18
+ module Filechooser
19
+ STARTFOLDER=File.expand_path("~")
20
+ NO_CHOICE="||Abort||"
21
+ Highline.init
22
+ end
23
+
24
+ #puts Filechooser.filechooser
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: filechooser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jogan Thums
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-08-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: highline
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.7.8
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.7'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.7.8
33
+ description: provides a command line version of a GUI file or directory chooser like
34
+ Gtk::FileChooserDialog
35
+ email:
36
+ - skopeo@gmx.net
37
+ executables:
38
+ - filechooser
39
+ - dirchooser
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - bin/dirchooser
44
+ - bin/filechooser
45
+ - lib/filechooser.rb
46
+ - lib/filechooser/api.rb
47
+ - lib/filechooser/highline-module.rb
48
+ - lib/filechooser/string-class.rb
49
+ homepage: http://rubygems.org/gems/filechooser
50
+ licenses:
51
+ - MIT
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2.2.0
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.6.12
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: file or directory chooser
73
+ test_files: []