You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.8 KiB
60 lines
1.8 KiB
--------------------------------------------------------------------------- |
|
-- @author Harvey Mittens |
|
-- @copyright 2014 Harvey Mittens |
|
-- @email teknocratdefunct@riseup.net |
|
-- @release v3.5.5 |
|
--------------------------------------------------------------------------- |
|
|
|
local menu_gen = require("menubar.menu_gen") |
|
local menu_utils = require("menubar.utils") |
|
local pairs = pairs |
|
local ipairs = ipairs |
|
local table = table |
|
local string = string |
|
local next = next |
|
|
|
module("menugen") |
|
|
|
-- Built in menubar should be checking local applications directory |
|
menu_gen.all_menu_dirs = { '/usr/share/applications/', '/usr/local/share/applications/', '~/.local/share/applications' } |
|
|
|
-- Expecting an wm_name of awesome omits too many applications and tools |
|
menu_utils.wm_name = "" |
|
|
|
-- Use MenuBar Parsing Utils to build StartMenu for Awesome |
|
-- @return awful.menu compliant menu items tree |
|
function build_menu() |
|
local result = {} |
|
local menulist = menu_gen.generate() |
|
|
|
for k,v in pairs(menu_gen.all_categories) do |
|
table.insert(result, {k, {}, v["icon"] } ) |
|
end |
|
|
|
for k, v in ipairs(menulist) do |
|
for _, cat in ipairs(result) do |
|
if cat[1] == v["category"] then |
|
table.insert( cat[2] , { v["name"], v["cmdline"], v["icon"] } ) |
|
break |
|
end |
|
end |
|
end |
|
|
|
-- Cleanup Things a Bit |
|
for k,v in ipairs(result) do |
|
-- Remove Unused Categories |
|
if not next(v[2]) then |
|
table.remove(result, k) |
|
else |
|
--Sort entries Alphabetically (by Name) |
|
table.sort(v[2], function (a,b) return string.byte(a[1]) < string.byte(b[1]) end) |
|
-- Replace Catagory Name with nice name |
|
v[1] = menu_gen.all_categories[v[1]].name |
|
end |
|
end |
|
|
|
-- Sort Categories Alphabetically Also |
|
table.sort(result, function(a,b) return string.byte(a[1]) < string.byte(b[1]) end) |
|
|
|
return result |
|
end
|
|
|