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 +7 -0
- data/bin/dirchooser +6 -0
- data/bin/filechooser +6 -0
- data/lib/filechooser/api.rb +164 -0
- data/lib/filechooser/highline-module.rb +48 -0
- data/lib/filechooser/string-class.rb +15 -0
- data/lib/filechooser.rb +24 -0
- metadata +73 -0
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
data/bin/filechooser
ADDED
@@ -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
|
+
|
data/lib/filechooser.rb
ADDED
@@ -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: []
|