Files
I-Dotfiles/.config/swayimg/init.lua
T

213 lines
5.7 KiB
Lua

swayimg.mode = "viewer"
swayimg.appid = "swayimg"
swayimg.imagelist.order = "mtime"
-- "none": unsorted (whatever order the system returns)
-- "alpha": lexicographic, so 1, 10, 2, 20, a, b, c
-- "numeric": numeric-aware, so 1, 2, 3, 10, 100, a, b, c
-- "mtime": by modification time
-- "size": by file size
-- "random": shuffled
swayimg.imagelist.adjacent = true -- INI list.all = yes (default: false)
-- Text overlay
swayimg.text.visible = false -- INI info.show = no (default: true)
swayimg.text.size = 19 -- INI font.size = 14pt; Lua uses pixels (14pt ~ 19px)
swayimg.text.shadow = 0xd0000000 -- INI font.shadow = #000000d0 (ARGB here)
-- INI info.viewer layout: image size at top left, frame info at bottom left
swayimg.viewer.text = {
topleft = {
"File:\t{name}",
"Format:\t{format}",
"File size:\t{sizehr}",
"File time:\t{time}",
"Size:\t{frame.width}x{frame.height}",
"EXIF date:\t{meta.Exif.Photo.DateTimeOriginal}",
"EXIF camera:\t{meta.Exif.Image.Model}",
},
topright = {
"Image:\t{list.index} of {list.total}",
},
bottomleft = {
"Scale:\t{scale}",
"Frame:\t{frame.index} of {frame.total}",
},
}
-- INI info.gallery layout: only the file name, bottom right
swayimg.gallery.text = {
bottomright = { "{name}" },
}
-- Gallery appearance
swayimg.gallery.border_color = 0xff000000 -- INI gallery.border = #000000ff (default: 0xffaaaaaa)
-- Helpers
local function next_frame()
swayimg.viewer.frame = swayimg.viewer.frame + 1
end
local function prev_frame()
local frame = swayimg.viewer.frame
if frame > 0 then
swayimg.viewer.frame = frame - 1
end
end
-- INI "skip_file": drop the current image from the list
local function skip_image(img)
if img then
swayimg.imagelist.remove(img.path)
end
end
-- INI: exec rm "%"; skip_file (permanently deletes the file from disk!)
local function delete_image(img)
if img then
local path = img.path
os.remove(path)
swayimg.imagelist.remove(path)
swayimg.text.status = "Deleted " .. path
end
end
-- Signals (INI general.sigusr1 = reload, general.sigusr2 = next_file)
swayimg.viewer.on_signal("USR1", function()
swayimg.viewer.reload()
end)
swayimg.viewer.on_signal("USR2", function()
swayimg.viewer.open("next")
end)
swayimg.slideshow.on_signal("USR1", function()
swayimg.slideshow.reload()
end)
swayimg.slideshow.on_signal("USR2", function()
swayimg.slideshow.open("next")
end)
swayimg.gallery.on_signal("USR1", function()
swayimg.gallery.reload()
end)
-- Viewer key bindings
-- file navigation
swayimg.viewer.on_key("h", function()
swayimg.viewer.open("first")
end)
swayimg.viewer.on_key("l", function()
swayimg.viewer.open("last")
end)
swayimg.viewer.on_key("j", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_key("k", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("Home", function()
swayimg.viewer.open("first")
end)
swayimg.viewer.on_key("End", function()
swayimg.viewer.open("last")
end)
-- NOTE: Left/Right switch images, as in the INI. The default (pan image)
-- is overridden; scroll or the vertical arrows still pan.
swayimg.viewer.on_key("left", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_key("right", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("space", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_key("Shift+r", function()
swayimg.viewer.open("random")
end)
swayimg.viewer.on_key("Shift+d", function()
swayimg.viewer.open("prev_dir")
end)
swayimg.viewer.on_key("d", function()
swayimg.viewer.open("next_dir")
end)
-- frames / animation / slideshow
swayimg.viewer.on_key("Shift+o", prev_frame)
swayimg.viewer.on_key("o", next_frame)
swayimg.viewer.on_key("s", function() -- INI: s = animation (toggle)
swayimg.viewer.animation = not swayimg.viewer.animation
end)
swayimg.viewer.on_key("Shift+s", function() -- INI: Shift+s = slideshow
swayimg.mode = "slideshow"
end)
-- skip / delete
swayimg.viewer.on_key("c", function()
skip_image(swayimg.viewer.get_image())
end)
swayimg.viewer.on_key("Shift+Delete", function()
delete_image(swayimg.viewer.get_image())
end)
-- zoom
swayimg.viewer.on_key("plus", function()
swayimg.viewer.scale = swayimg.viewer.scale + swayimg.viewer.scale / 10
end)
swayimg.viewer.on_key("w", function()
swayimg.viewer.set_fix_scale("width")
end)
swayimg.viewer.on_key("Shift+w", function()
swayimg.viewer.set_fix_scale("height")
end)
swayimg.viewer.on_key("z", function()
swayimg.viewer.set_fix_scale("fit")
end)
swayimg.viewer.on_key("Shift+z", function()
swayimg.viewer.set_fix_scale("fill")
end)
swayimg.viewer.on_key("0", function()
swayimg.viewer.set_fix_scale("real")
end)
swayimg.viewer.on_key("backspace", function()
swayimg.viewer.set_fix_scale("optimal")
end)
-- misc
swayimg.viewer.on_key("r", function()
swayimg.viewer.reload()
end)
swayimg.viewer.on_key("i", function()
swayimg.text.visible = not swayimg.text.visible
end)
swayimg.viewer.on_key("q", function()
swayimg.exit()
end)
-- mouse
swayimg.viewer.on_mouse("Shift+ScrollUp", function()
swayimg.viewer.open("prev")
end)
swayimg.viewer.on_mouse("Shift+ScrollDown", function()
swayimg.viewer.open("next")
end)
swayimg.viewer.on_mouse("Alt+ScrollUp", prev_frame)
swayimg.viewer.on_mouse("Alt+ScrollDown", next_frame)
--------------------------------------------------------------------------------
-- Gallery key bindings
--------------------------------------------------------------------------------
swayimg.gallery.on_key("c", function()
skip_image(swayimg.gallery.get_image())
end)
swayimg.gallery.on_key("Shift+Delete", function()
delete_image(swayimg.gallery.get_image())
end)
swayimg.gallery.on_key("r", function()
swayimg.gallery.reload()
end)
swayimg.gallery.on_key("i", function()
swayimg.text.visible = not swayimg.text.visible
end)
swayimg.gallery.on_key("q", function()
swayimg.exit()
end)