fluxbox_apps_menu 1.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.
- data/Gemfile +4 -0
- data/Gemfile.lock +21 -0
- data/LICENSE +674 -0
- data/README.md +57 -0
- data/Rakefile +2 -0
- data/bin/fluxbox_apps_menu +6 -0
- data/fluxbox_apps_menu.gemspec +26 -0
- data/lib/fluxbox_apps_menu.rb +85 -0
- data/lib/fluxbox_apps_menu.yaml +123 -0
- data/lib/fluxbox_apps_menu/cli.rb +50 -0
- data/lib/fluxbox_apps_menu/config.rb +50 -0
- data/lib/fluxbox_apps_menu/desktop_file.rb +69 -0
- data/lib/fluxbox_apps_menu/menu.rb +100 -0
- data/lib/fluxbox_apps_menu/utils.rb +21 -0
- data/lib/fluxbox_apps_menu/version.rb +3 -0
- metadata +127 -0
@@ -0,0 +1,100 @@
|
|
1
|
+
module FluxboxAppsMenu
|
2
|
+
|
3
|
+
class Menu
|
4
|
+
|
5
|
+
def initialize(cfg = nil)
|
6
|
+
@cfg = cfg.nil? ? FluxboxAppsMenu::Config.new : cfg
|
7
|
+
end
|
8
|
+
|
9
|
+
def assign_menu(cat, label)
|
10
|
+
traverse_menu(@cfg.menu, cat, label)[0]
|
11
|
+
end
|
12
|
+
|
13
|
+
def render
|
14
|
+
render_menu(@cfg.menu)
|
15
|
+
end
|
16
|
+
|
17
|
+
def item_exec(label, icon, command)
|
18
|
+
menu_item(label, icon, 'exec', command)
|
19
|
+
end
|
20
|
+
|
21
|
+
def item_submenu(label, icon)
|
22
|
+
menu_item(label, icon, 'submenu')
|
23
|
+
end
|
24
|
+
|
25
|
+
def item_separator
|
26
|
+
menu_item('', '', 'separator')
|
27
|
+
end
|
28
|
+
|
29
|
+
# type = submenu, exec, separator
|
30
|
+
private
|
31
|
+
|
32
|
+
def menu_item(label, icon, type = 'exec', command = nil)
|
33
|
+
label = " (#{label})" unless label.to_s.empty?
|
34
|
+
icon = " <#{icon}>" unless icon.to_s.empty?
|
35
|
+
command = " {#{command}}" unless command.nil?
|
36
|
+
|
37
|
+
"[#{type}]#{label}#{command}#{icon}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def traverse_menu(menu, cat, label, selected_index = nil)
|
41
|
+
#categories with smaller index are the favorites
|
42
|
+
selected_index ||= 10000
|
43
|
+
selected = nil
|
44
|
+
|
45
|
+
items = menu.select { |k, v| k.class == String }
|
46
|
+
|
47
|
+
items.each do |key, info|
|
48
|
+
if info.class == Hash
|
49
|
+
subitems = info.select { |k, v| k.class == String }
|
50
|
+
|
51
|
+
# when a label is set the path has high priority
|
52
|
+
return [info, 0] if info.has_key?(label)
|
53
|
+
|
54
|
+
unless subitems.to_hash.empty?
|
55
|
+
result, index = traverse_menu(subitems, cat, label, selected_index)
|
56
|
+
selected, selected_index = result, index unless result.nil?
|
57
|
+
end
|
58
|
+
|
59
|
+
cat.each do |c|
|
60
|
+
if info[:categories].include?(c.strip)
|
61
|
+
i = info[:categories].index(c)
|
62
|
+
if i < selected_index
|
63
|
+
selected = info
|
64
|
+
selected_index = i
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end if info.has_key? :categories
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
[selected, selected_index]
|
72
|
+
end
|
73
|
+
|
74
|
+
def render_menu(menu, level = 0)
|
75
|
+
prefix = ' ' * (level)
|
76
|
+
text = ''
|
77
|
+
|
78
|
+
# sort the items but let menu folders at the top
|
79
|
+
menu = menu.select { |k, v| k.class == String }.sort_by { |k, v| v.class == String ? k.downcase : '' }
|
80
|
+
menu.each do |name, items|
|
81
|
+
if items.class.to_s == 'Hash'
|
82
|
+
text += prefix + item_submenu(name, @cfg.expand_icon(nil, items[:icon])) + "\n"
|
83
|
+
|
84
|
+
items = items.select { |k, v| k.class == String }
|
85
|
+
|
86
|
+
text += render_menu(items, level + 1)
|
87
|
+
|
88
|
+
text += "#{prefix}[end]\n"
|
89
|
+
elsif items.class.to_s == 'String'
|
90
|
+
text += prefix + items + "\n"
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
text
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,21 @@
|
|
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
|
21
|
+
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fluxbox_apps_menu
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Fabio Mucciante
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-08-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.6'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.6'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: inifile
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '3.0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: thor
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: This script reads the .desktop files installed and build the application's
|
79
|
+
menu under the Fluxbox home folder.
|
80
|
+
email:
|
81
|
+
- fabio.mucciante@gmail.com
|
82
|
+
executables:
|
83
|
+
- fluxbox_apps_menu
|
84
|
+
extensions: []
|
85
|
+
extra_rdoc_files: []
|
86
|
+
files:
|
87
|
+
- Gemfile
|
88
|
+
- Gemfile.lock
|
89
|
+
- LICENSE
|
90
|
+
- README.md
|
91
|
+
- Rakefile
|
92
|
+
- bin/fluxbox_apps_menu
|
93
|
+
- fluxbox_apps_menu.gemspec
|
94
|
+
- lib/fluxbox_apps_menu.rb
|
95
|
+
- lib/fluxbox_apps_menu.yaml
|
96
|
+
- lib/fluxbox_apps_menu/cli.rb
|
97
|
+
- lib/fluxbox_apps_menu/config.rb
|
98
|
+
- lib/fluxbox_apps_menu/desktop_file.rb
|
99
|
+
- lib/fluxbox_apps_menu/menu.rb
|
100
|
+
- lib/fluxbox_apps_menu/utils.rb
|
101
|
+
- lib/fluxbox_apps_menu/version.rb
|
102
|
+
homepage: https://github.com/fabiomux/fluxbox_apps_menu
|
103
|
+
licenses:
|
104
|
+
- GPL v.3
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
require_paths:
|
108
|
+
- lib
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 1.8.23
|
124
|
+
signing_key:
|
125
|
+
specification_version: 3
|
126
|
+
summary: Build the Fluxbox apps menu.
|
127
|
+
test_files: []
|