dotfiles/awesome/widgets/folder.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