walker
This commit is contained in:
109
walker/.config/elephant/menus/test.css
Normal file
109
walker/.config/elephant/menus/test.css
Normal file
@@ -0,0 +1,109 @@
|
||||
Name = "twallpaper"
|
||||
NamePretty = "Wallpaper switcher"
|
||||
Icon = "applications-other"
|
||||
Cache = true
|
||||
Action = "swww img %VALUE%"
|
||||
HideFromProviderlist = false
|
||||
Description = "Wallpaper change menu"
|
||||
SearchName = true
|
||||
|
||||
-- Конфигурация
|
||||
local config = {
|
||||
wallpaper_dir = os.getenv("HOME") .. "/Pictures/Wallpapers",
|
||||
supported_formats = {
|
||||
jpg = true, jpeg = true, png = true,
|
||||
gif = true, bmp = true, webp = true
|
||||
}
|
||||
}
|
||||
|
||||
function GetEntries()
|
||||
local entries = {}
|
||||
local lfs = require("lfs")
|
||||
|
||||
-- Проверяем существование основной директории
|
||||
local test_handle = io.open(config.wallpaper_dir, "r")
|
||||
if not test_handle then
|
||||
return {{
|
||||
Text = "Error: Wallpaper directory not found!",
|
||||
Subtext = config.wallpaper_dir,
|
||||
Value = "",
|
||||
Preview = "",
|
||||
PreviewType = "text",
|
||||
Icon = "error"
|
||||
}}
|
||||
end
|
||||
test_handle:close()
|
||||
|
||||
-- Получаем список поддиректорий
|
||||
local subdirs = {}
|
||||
for item in lfs.dir(config.wallpaper_dir) do
|
||||
if item ~= "." and item ~= ".." then
|
||||
local path = config.wallpaper_dir .. "/" .. item
|
||||
local attr = lfs.attributes(path)
|
||||
if attr and attr.mode == "directory" then
|
||||
table.insert(subdirs, item)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Создаём запись для основной директории (все обои без группировки)
|
||||
table.insert(entries, {
|
||||
Text = "All wallpapers",
|
||||
Subtext = "Show all available wallpapers",
|
||||
Value = "all",
|
||||
Preview = "",
|
||||
PreviewType = "text",
|
||||
Icon = "view-fullscreen"
|
||||
})
|
||||
|
||||
-- Создаём записи для поддиректорий (подменю)
|
||||
for _, dirname in ipairs(subdirs) do
|
||||
table.insert(entries, {
|
||||
Text = dirname,
|
||||
Subtext = "Wallpapers from '" .. dirname .. "'",
|
||||
Value = dirname,
|
||||
Preview = "",
|
||||
PreviewType = "text",
|
||||
Icon = "folder"
|
||||
})
|
||||
end
|
||||
|
||||
return entries
|
||||
end
|
||||
|
||||
-- Функция для получения обоев из конкретной директории
|
||||
function GetWallpapersFromDir(dirname)
|
||||
local wallpapers = {}
|
||||
local lfs = require("lfs")
|
||||
local target_dir
|
||||
|
||||
if dirname == "all" then
|
||||
target_dir = config.wallpaper_dir
|
||||
else
|
||||
target_dir = config.wallpaper_dir .. "/" .. dirname
|
||||
end
|
||||
|
||||
for filename in lfs.dir(target_dir) do
|
||||
if filename ~= "." and filename ~= ".." then
|
||||
local filepath = target_dir .. "/" .. filename
|
||||
local attr = lfs.attributes(filepath)
|
||||
if attr and attr.mode == "file" then
|
||||
local ext = filename:match("%.([^%.]+)$")
|
||||
if ext and config.supported_formats[ext:lower()] then
|
||||
table.insert(wallpapers, {
|
||||
Text = filename,
|
||||
Subtext = "From '" .. (dirname == "all" and "All" or dirname) .. "'",
|
||||
Value = filepath,
|
||||
Preview = filepath,
|
||||
PreviewType = "file",
|
||||
Icon = filepath
|
||||
})
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table.sort(wallpapers, function(a, b) return a.Text < b.Text end)
|
||||
return wallpapers
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user