97 lines
3.2 KiB
Lua
97 lines
3.2 KiB
Lua
|
-- ███████╗ ██████╗ ██╗ ██████╗ ███████╗██████╗
|
||
|
-- ██╔════╝██╔═══██╗██║ ██╔══██╗██╔════╝██╔══██╗
|
||
|
-- █████╗ ██║ ██║██║ ██║ ██║█████╗ ██████╔╝
|
||
|
-- ██╔══╝ ██║ ██║██║ ██║ ██║██╔══╝ ██╔══██╗
|
||
|
-- ██║ ╚██████╔╝███████╗██████╔╝███████╗██║ ██║
|
||
|
-- ╚═╝ ╚═════╝ ╚══════╝╚═════╝ ╚══════╝╚═╝ ╚═╝
|
||
|
|
||
|
-- ===================================================================
|
||
|
-- Initialization
|
||
|
-- ===================================================================
|
||
|
|
||
|
|
||
|
local awful = require("awful")
|
||
|
local wibox = require("wibox")
|
||
|
local clickable_container = require("widgets.clickable-container")
|
||
|
local gears = require("gears")
|
||
|
local dpi = require("beautiful").xresources.apply_dpi
|
||
|
|
||
|
local HOME_DIR = os.getenv("HOME")
|
||
|
local PATH_TO_ICONS = HOME_DIR .. "/.config/awesome/icons/folders/"
|
||
|
|
||
|
-- define module table
|
||
|
local folder = {}
|
||
|
|
||
|
|
||
|
-- ===================================================================
|
||
|
-- Helper Functions
|
||
|
-- ===================================================================
|
||
|
|
||
|
|
||
|
-- split a string into a list based on a deliminator
|
||
|
local function split_string(inputstr, delim)
|
||
|
if delim == nil then
|
||
|
delim = "%s"
|
||
|
end
|
||
|
local t={}
|
||
|
for str in string.gmatch(inputstr, "([^"..delim.."]+)") do
|
||
|
table.insert(t, str)
|
||
|
end
|
||
|
return t
|
||
|
end
|
||
|
|
||
|
|
||
|
-- ===================================================================
|
||
|
-- Functionality
|
||
|
-- ===================================================================
|
||
|
|
||
|
|
||
|
function folder.create(directory)
|
||
|
local docu_widget = wibox.widget {
|
||
|
{
|
||
|
id = "icon",
|
||
|
widget = wibox.widget.imagebox,
|
||
|
resize = true
|
||
|
},
|
||
|
layout = wibox.layout.align.horizontal
|
||
|
}
|
||
|
|
||
|
local docu_button = clickable_container(wibox.container.margin(docu_widget, dpi(8), dpi(8), dpi(8), dpi(8)))
|
||
|
docu_button:buttons(
|
||
|
gears.table.join(
|
||
|
awful.button({}, 1, nil,
|
||
|
function()
|
||
|
awful.spawn.easy_async_with_shell(apps.filebrowser .. " " .. directory, function(stderr) end, 1)
|
||
|
end
|
||
|
)
|
||
|
)
|
||
|
)
|
||
|
|
||
|
-- determine hover name & icon to use
|
||
|
-- icon name must correspond with name of folder
|
||
|
local folder_name = ""
|
||
|
if directory == HOME_DIR then
|
||
|
folder_name = "Home"
|
||
|
elseif directory == "trash://" then
|
||
|
folder_name = "Trash"
|
||
|
else
|
||
|
local dir_list = split_string(directory, "/")
|
||
|
folder_name = dir_list[#dir_list]
|
||
|
end
|
||
|
|
||
|
awful.tooltip({
|
||
|
objects = {docu_button},
|
||
|
mode = "outside",
|
||
|
align = "right",
|
||
|
timer_function = function()
|
||
|
return folder_name
|
||
|
end,
|
||
|
preferred_positions = {"right", "left", "top", "bottom"}
|
||
|
})
|
||
|
|
||
|
docu_widget.icon:set_image(PATH_TO_ICONS .. folder_name:lower() .. ".png")
|
||
|
return docu_button
|
||
|
end
|
||
|
|
||
|
return folder
|