fluxbox_apps_menu 1.3.0 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 299c16c1c64506b78ab3c7d9cdf87f0c7b035315
4
- data.tar.gz: a5ed2130437276cdc9329db41b91725ff3a260ba
3
+ metadata.gz: dbe89b0ebddb88a2ad0b7d136d23d92033e23122
4
+ data.tar.gz: 4d9a9f61fe7e78d89d5fe166c356bd7272b01e1b
5
5
  SHA512:
6
- metadata.gz: 5268a846daa828e7f7bff6751f42cbb1ba46e00a9e24cfa960d5f88b2728e2093b1e87a42c847509aee474eb728ece1de165973fab0fe6f33450cefe01930cf2
7
- data.tar.gz: b3954afe8f8967aba09b1f265551c3c21c680a4ab99808d010b6e22eb2406c5e1886ae18a4bda75bb69e2f97bf33e16b3f8d6fd891d6b2893e0eb837015e424c
6
+ metadata.gz: 03563fe3b2285cf53d134e7163a431eb609fd7b682013777beaed6a4b57a1a17b40d9d597be329cf85e21504ab0b9a825d383ab46a9e649b4d9b5a059660021a
7
+ data.tar.gz: a5bb559edcbfad3a7bd40bf74b00ddb4a753cf872c1f7aa001dc9bdc4448c6d049f2b299244deca1e4a98dd2aaa0b7850cbe9cb33b7b2980fa1334d3b89452a9
@@ -2,13 +2,13 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  fluxbox_apps_menu (1.3.0)
5
- inifile (~> 3.0)
5
+ iniparse
6
6
  thor
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- inifile (3.0.0)
11
+ iniparse (1.4.2)
12
12
  rake (12.0.0)
13
13
  thor (0.19.4)
14
14
 
@@ -21,6 +21,6 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency "bundler", "~> 1.6"
22
22
  spec.add_development_dependency "rake"
23
23
 
24
- spec.add_runtime_dependency "inifile", "~> 3.0"
24
+ spec.add_runtime_dependency "iniparse"
25
25
  spec.add_runtime_dependency "thor"
26
26
  end
@@ -17,11 +17,8 @@ module FluxboxAppsMenu
17
17
  end
18
18
 
19
19
  def create_menu
20
- if @overwrite == false
21
- if File.exists?(File.expand_path("~/.fluxbox/#{@filename}"))
22
- STDERR.puts 'Fatal Error! '.bold.red "The file #{@filename} already exists!"
23
- exit
24
- end
20
+ unless @overwrite
21
+ raise FileExists, "~/.fluxbox/#{@filename}" if File.exists?(File.expand_path("~/.fluxbox/#{@filename}"))
25
22
  end
26
23
 
27
24
  scan_app_folder
@@ -31,10 +28,7 @@ module FluxboxAppsMenu
31
28
 
32
29
  def init_config
33
30
  unless @overwrite
34
- if File.exists?(File.expand_path("~/.fluxbox/fluxbox_apps_menu.yaml"))
35
- STDERR.puts 'Fatal Error! '.bold.red + "The file 'fluxbox_apps_menu.yaml' already exists in '#{File.expand_path('~/.fluxbox')}'"
36
- exit
37
- end
31
+ raise FileExists, '~/.fluxbox/fluxbox_apps_menu.yaml' if File.exists?(File.expand_path("~/.fluxbox/fluxbox_apps_menu.yaml"))
38
32
  end
39
33
  FileUtils.copy(File.dirname(__FILE__) + '/fluxbox_apps_menu.yaml', File.expand_path('~/.fluxbox/'))
40
34
  end
@@ -46,6 +40,8 @@ module FluxboxAppsMenu
46
40
 
47
41
  Dir.glob(File.expand_path(d + '/*.desktop')) do |f|
48
42
 
43
+ Messages.examining f if @verbose
44
+
49
45
  ini = DesktopFile.new(f, @cfg)
50
46
 
51
47
  next if ini.banned_file?
@@ -53,47 +49,35 @@ module FluxboxAppsMenu
53
49
  name = ini.name
54
50
 
55
51
  if ini.hidden?
56
- puts '[H] '.bold.gray + "\"#{name}\" (#{f})" if @verbose
52
+ Messages.hidden(name, f) if @verbose
57
53
  next
58
54
  end
59
55
 
60
56
  cat = ini.categories
61
57
  if cat.nil?
62
- puts '[C] '.bold.red + "\"#{name}\" (#{f})" if @verbose
58
+ Messages.no_category(name, f) if @verbose
63
59
  next
64
60
  end
65
61
 
66
- begin
67
- submenu = @fmenu.assign_menu(cat, name)
68
- rescue NoCategoriesError => e
69
- STDERR.puts 'Fatal Error! '.bold.red + "The \"#{e.message}\" menu item doesn't have any category, fix it to your \"fluxbox_menu_apps.yaml\""
70
- exit
71
- end
62
+ submenu = @fmenu.assign_menu(cat, name)
72
63
 
73
- unless submenu.nil?
74
- icon = ini.icon
64
+ raise NoMappedCategories, {:name => name, :categories => ini.categories} if submenu.nil?
65
+
66
+ icon = ini.icon
67
+
68
+ submenu[name] = MenuItem.new(:label => name, :icon => icon, :command => ini.exec)
69
+
70
+ if @verbose
75
71
  if icon.nil?
76
- puts '[I] '.bold.yellow + "\"#{name}\" (#{f})" if @verbose
72
+ Messages.no_icon(name, f)
73
+ else
74
+ Messages.ok(name, f)
77
75
  end
78
-
79
- submenu[name] = MenuItem.new(:label => name, :icon => icon, :command => ini.exec)
80
- puts '[V]'.bold.green + " \"#{name}\" (#{f})" if @verbose
81
- else
82
- STDERR.puts 'Warning! '.bold.yellow + "\"#{name}\" doesn't have any mapped category among: #{ini.categories.join(', ')}, fix it to your \"fluxbox_menu_apps.yaml\" "
83
76
  end
84
77
  end
85
78
  end
86
79
 
87
- if @verbose
88
- puts ''
89
- puts 'Quick Help:'
90
- puts ''
91
- puts ' [V]: Everything is ok'.bold.green
92
- puts ' [H]: Hidden app'.bold.gray
93
- puts ' [I]: App without icon'.bold.yellow
94
- puts ' [C]: App without categories'.bold.red
95
- puts ''
96
- end
80
+ Messages.help if @verbose
97
81
  end
98
82
 
99
83
  end
@@ -1,6 +1,4 @@
1
1
  ---
2
- # other options: kdesu and gnomesu
3
- :switch_user: 'xdg-su'
4
2
  :terminal: 'xdg-terminal'
5
3
  :icons:
6
4
  App Name: 'icon-name'
@@ -98,11 +96,15 @@
98
96
  :categories:
99
97
  - Yast
100
98
  Hardware:
101
- :icon: package_yast_hardware
99
+ :icon:
100
+ - package_yast_hardware
101
+ - yast-hardware
102
102
  :categories:
103
103
  - X-SuSE-YaST-Hardware
104
104
  Miscellaneous:
105
- :icon: package_yast_misc
105
+ :icon:
106
+ - package_yast_misc
107
+ - yast-misc
106
108
  :categories:
107
109
  - X-SuSE-YaST-Misc
108
110
  Network Devices:
@@ -118,7 +120,9 @@
118
120
  :categories:
119
121
  - X-SuSE-YaST-Security
120
122
  System:
121
- :icon: package_yast_system
123
+ :icon:
124
+ - package_yast_system
125
+ - yast-system
122
126
  :categories:
123
127
  - X-SuSE-YaST-System
124
128
  Software:
@@ -50,6 +50,15 @@ EOL
50
50
  end
51
51
  end
52
52
 
53
+ def self.start
54
+ begin
55
+ super
56
+ rescue => e
57
+ Messages.error e
58
+ exit 1
59
+ end
60
+ end
61
+
53
62
  # default_task :build
54
63
  end
55
64
 
@@ -18,13 +18,13 @@ module FluxboxAppsMenu
18
18
 
19
19
  yaml = YAML.load_file(@filename)
20
20
 
21
- @banned_files = yaml[:banned_files]
22
- @unhide_files = yaml[:unhide_files]
23
- @icon_paths = yaml[:icon_paths]
24
- @app_paths = yaml[:app_paths]
25
- @menu = yaml[:menu]
26
- @icons = yaml[:icons]
27
- @terminal = yaml[:terminal]
21
+ @banned_files = yaml[:banned_files] || []
22
+ @unhide_files = yaml[:unhide_files] || []
23
+ @icon_paths = yaml[:icon_paths] || []
24
+ @app_paths = yaml[:app_paths] || []
25
+ @menu = yaml[:menu] || {}
26
+ @icons = yaml[:icons] || {}
27
+ @terminal = yaml[:terminal] || 'xdg-terminal'
28
28
 
29
29
  @lang = ENV['LANG'].split('.')[0]
30
30
  @lang = { :short => @lang.split('_')[0], :long => @lang }
@@ -35,16 +35,19 @@ module FluxboxAppsMenu
35
35
  iname = icon_name if iname.nil?
36
36
 
37
37
  return nil if iname.to_s.empty?
38
- return iname if iname.to_s.match('/') && File.exists?(iname)
38
+ return iname if iname.class == String && iname =~ /^\// && File.exists?(iname)
39
39
 
40
- iname.gsub!(/\.png$/, '')
40
+ iname = [iname] if iname.class == String
41
41
 
42
- @icon_paths.each do |p|
43
- return "#{p}/#{iname}.png" if File.exists?("#{p}/#{iname}.png")
44
- end
42
+ iname.each do |i|
43
+ i = File.basename(i, File.extname(i))
45
44
 
46
- return nil
45
+ @icon_paths.each do |p|
46
+ return "#{p}/#{i}.png" if File.exists?("#{p}/#{i}.png")
47
+ end
48
+ end
47
49
 
50
+ nil
48
51
  end
49
52
  end
50
53
  end
@@ -1,11 +1,11 @@
1
- require 'inifile'
2
- #require 'fluxbox_apps_menu/config'
1
+ require 'iniparse'
2
+
3
3
  module FluxboxAppsMenu
4
4
 
5
5
  class DesktopFile
6
6
 
7
7
  def initialize(filename, cfg = nil)
8
- @ini = IniFile.new(:filename => filename, :comment => '#', :encoding => 'UTF-8')
8
+ @ini = IniParse.parse(File.read(filename))
9
9
  @cfg = cfg.nil? ? FluxboxAppsMenu::Config.new : cfg
10
10
  @filename = filename
11
11
  end
@@ -112,7 +112,7 @@ module FluxboxAppsMenu
112
112
  selected, selected_index = result, index unless result.nil?
113
113
  end
114
114
 
115
- raise NoCategoriesError, key unless info.has_key? :categories
115
+ raise NoMenuCategories, key unless info.has_key? :categories
116
116
 
117
117
  categories = info[:categories].map { |s| s.downcase unless s.nil? }
118
118
 
@@ -1,24 +1,97 @@
1
- class String
2
- def black; "\033[30m#{self}\033[0m" end
3
- def red; "\033[31m#{self}\033[0m" end
4
- def green; "\033[32m#{self}\033[0m" end
5
- def yellow; "\033[33m#{self}\033[0m" end
6
- def blue; "\033[34m#{self}\033[0m" end
7
- def magenta; "\033[35m#{self}\033[0m" end
8
- def cyan; "\033[36m#{self}\033[0m" end
9
- def gray; "\033[37m#{self}\033[0m" end
10
- def bg_black; "\033[40m#{self}\0330m" end
11
- def bg_red; "\033[41m#{self}\033[0m" end
12
- def bg_green; "\033[42m#{self}\033[0m" end
13
- def bg_brown; "\033[43m#{self}\033[0m" end
14
- def bg_blue; "\033[44m#{self}\033[0m" end
15
- def bg_magenta; "\033[45m#{self}\033[0m" end
16
- def bg_cyan; "\033[46m#{self}\033[0m" end
17
- def bg_gray; "\033[47m#{self}\033[0m" end
18
- def bold; "\033[1m#{self}\033[22m" end
19
- def reverse_color; "\033[7m#{self}\033[27m" end
20
- end
1
+ module FluxboxAppsMenu
2
+
3
+ class ::String
4
+ def black; "\033[30m#{self}\033[0m" end
5
+ def red; "\033[31m#{self}\033[0m" end
6
+ def green; "\033[32m#{self}\033[0m" end
7
+ def yellow; "\033[33m#{self}\033[0m" end
8
+ def blue; "\033[34m#{self}\033[0m" end
9
+ def magenta; "\033[35m#{self}\033[0m" end
10
+ def cyan; "\033[36m#{self}\033[0m" end
11
+ def gray; "\033[37m#{self}\033[0m" end
12
+ def bg_black; "\033[40m#{self}\0330m" end
13
+ def bg_red; "\033[41m#{self}\033[0m" end
14
+ def bg_green; "\033[42m#{self}\033[0m" end
15
+ def bg_brown; "\033[43m#{self}\033[0m" end
16
+ def bg_blue; "\033[44m#{self}\033[0m" end
17
+ def bg_magenta; "\033[45m#{self}\033[0m" end
18
+ def bg_cyan; "\033[46m#{self}\033[0m" end
19
+ def bg_gray; "\033[47m#{self}\033[0m" end
20
+ def bold; "\033[1m#{self}\033[22m" end
21
+ def reverse_color; "\033[7m#{self}\033[27m" end
22
+ def cr; "\r#{self}" end
23
+ def clean; "\e[K#{self}" end
24
+ def new_line; "\n#{self}" end
25
+ end
26
+
27
+ class Messages
28
+ def self.error(e)
29
+ if e.class.to_s =~ /^FluxboxAppsMenu/
30
+ STDERR.puts e.message.new_line
31
+ else
32
+ STDERR.puts 'Error! '.bold.red.new_line + e.message
33
+ end
34
+ end
35
+
36
+ def self.examining(filename)
37
+ print '[-] '.bold.blue + "Examining #{filename}... "
38
+ STDOUT.flush
39
+ sleep 0.01
40
+ end
41
+
42
+ def self.hidden(name, filename)
43
+ puts '[H] '.bold.gray.clean.cr + "\"#{name}\" (#{filename})"
44
+ end
45
+
46
+ def self.no_icon(name, filename)
47
+ puts '[I] '.bold.yellow.clean.cr + "\"#{name}\" (#{filename})"
48
+ end
49
+
50
+ def self.ok(name, filename)
51
+ puts '[V]'.bold.green.clean.cr + " \"#{name}\" (#{filename})"
52
+ end
53
+
54
+ def self.no_category(name, filename)
55
+ puts '[C] '.bold.red.clean.cr + "\"#{name}\" (#{filename})"
56
+ end
57
+
58
+ def self.help
59
+ puts ''
60
+ puts 'Quick Help:'
61
+ puts ''
62
+ puts ' [V]: Everything is ok'.bold.green
63
+ puts ' [H]: Hidden app'.bold.gray
64
+ puts ' [I]: App without icon'.bold.yellow
65
+ puts ' [C]: App without categories'.bold.red
66
+ puts ''
67
+ end
68
+ end
69
+
70
+ class NoMenuCategories < StandardError
71
+ def initialize(item)
72
+ super 'Error! '.bold.red + "The menu item \"#{item}\" doesn't have any category, fix it to \"fluxbox_apps_menu.yaml\""
73
+ end
74
+ end
75
+
76
+ class NoMappedCategories < StandardError
77
+ def initialize(params)
78
+ super 'Error! '.bold.red + "The item \"#{params[:name]}\" doesn't have any mapped category among #{params[:categories].join(', ')}, fix it to \"fluxbox_apps_menu.yaml\""
79
+ end
80
+ end
81
+
82
+ class FileExists < StandardError
83
+ def initialize(filename)
84
+ super 'Error! '.bold.red + "The file #{filename} already exists, use the --overwrite switch to avoid this error."
85
+ end
86
+ end
87
+
88
+ class Interruption < StandardError
89
+ def initialize
90
+ super '[X] Ok ok... Exiting!'.bold.blue
91
+ end
92
+ end
93
+
94
+ Signal.trap('INT') { raise Interruption }
21
95
 
22
- class NoCategoriesError < StandardError
23
-
96
+ Signal.trap('TERM') { raise Interruption }
24
97
  end
@@ -1,3 +1,3 @@
1
1
  module FluxboxAppsMenu
2
- VERSION = '1.3.0'
2
+ VERSION = '1.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluxbox_apps_menu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fabio Mucciante
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-08 00:00:00.000000000 Z
11
+ date: 2017-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -39,19 +39,19 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: inifile
42
+ name: iniparse
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '3.0'
47
+ version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '3.0'
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: thor
57
57
  requirement: !ruby/object:Gem::Requirement