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)