commit bfca4c3c38220fc2346f9db128d6e379dbcd8edf
Author: lumidify <nobody@lumidify.org>
Date:   Fri, 21 Feb 2020 14:18:51 +0100
Initial Commit
Diffstat:
9 files changed, 297 insertions(+), 0 deletions(-)
diff --git a/.lumidify_archive_cksums b/.lumidify_archive_cksums
@@ -0,0 +1,6 @@
+26771784 73 "fehs.sh"
+2159480273 272 "sort.pl"
+762405641 262 "fromto.pl"
+4116778262 264 "everysecond.pl"
+829533685 5185 "crop.py"
+1461577717 468 "sort2.pl"
diff --git a/.lumidify_archive_cksums.cksum b/.lumidify_archive_cksums.cksum
@@ -0,0 +1,2 @@
+2885505858 156 ".lumidify_archive_cksums"
+4294967295 0 ".lumidify_archive_dirs"
diff --git a/.lumidify_archive_dirs b/.lumidify_archive_dirs
diff --git a/crop.py b/crop.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python3
+
+# WARNING: CRAP CODE!!!
+# just generate list filled with None in beginning
+
+import sys
+import tkinter
+from PIL import ImageTk, Image
+
+if len(sys.argv) < 2:
+	print("No images specified")
+	sys.exit(1)
+
+cur_img = 1
+
+dragging = False
+dragging_rect = False
+x_orig = 0
+y_orig = 0
+x_new = 0
+y_new = 0
+x_grab = 0
+y_grab = 0
+x_drag_offset = 0
+y_drag_offset = 0
+
+# First None is ignored since cur_img is always one ahead (first arg is script name)
+coords = [None, None]
+img_sizes = [None]
+
+def rect_intersect(x1, y1, x2, y2, x_point, y_point):
+	if x1 > x2:
+		tmp = x1
+		x1 = x2
+		x2 = tmp
+	if y1 > y2:
+		tmp = y1
+		y1 = y2
+		y2 = tmp
+	return x1 <= x_point <= x2 and y1 <= y_point <= y2
+
+def press(event):
+	global dragging, dragging_rect, x_orig, y_orig, x_grab, y_grab, x_new, y_new, x_drag_offset, y_drag_offset
+	if abs(x_orig - event.x) < 15 and abs(y_orig - event.y) < 15:
+		dragging = True
+		x_drag_offset = x_orig - event.x
+		y_drag_offset = y_orig - event.y
+		x_orig = x_new
+		y_orig = y_new
+		x_new = event.x
+		y_new = event.y
+	elif abs(x_new - event.x) < 15 and abs(y_new - event.y) < 15:
+		dragging = True
+		x_drag_offset = x_new - event.x
+		y_drag_offset = y_new - event.y
+	elif rect_intersect(x_orig, y_orig, x_new, y_new, event.x, event.y):
+		dragging_rect = True
+		x_grab = event.x
+		y_grab = event.y
+	else:
+		dragging = True
+		x_orig = event.x
+		y_orig = event.y
+		x_drag_offset = 0
+		y_drag_offset = 0
+
+def motion(event):
+	global dragging, dragging_rect, x_orig, y_orig, x_new, y_new, x_grab, y_grab
+	if dragging:
+		x_new = event.x + x_drag_offset
+		y_new = event.y + y_drag_offset
+	elif dragging_rect:
+		x_delta = event.x - x_grab
+		y_delta = event.y - y_grab
+		x_grab = event.x
+		y_grab = event.y
+		x_orig += x_delta
+		x_new += x_delta
+		y_orig += y_delta
+		y_new += y_delta
+	event.widget.create_rectangle(x_orig, y_orig, x_new, y_new)
+
+def release(event):
+	global dragging, dragging_rect, tkimg, x_orig, y_orig, x_new, y_new
+	if dragging:
+		dragging = False
+		x_new = event.x + x_drag_offset
+		y_new = event.y + y_drag_offset
+	elif dragging_rect:
+		dragging_rect = False
+		x_delta = event.x - x_grab
+		y_delta = event.y - y_grab
+		x_orig += x_delta
+		x_new += x_delta
+		y_orig += y_delta
+		y_new += y_delta
+	event.widget.create_image(0, 0, anchor=tkinter.NW, image=tkimg)
+	event.widget.create_rectangle(x_orig, y_orig, x_new, y_new)
+
+def print_exit(*args):
+	global cur_img
+	cur_img = -1 
+	for c in coords:
+		cur_img += 1
+		if c == None:
+			continue
+		x_scale = img_sizes[cur_img][0] / img_sizes[cur_img][2]
+		y_scale = img_sizes[cur_img][1] / img_sizes[cur_img][3]
+		x1 = min(c[0], c[2])
+		x2 = max(c[0], c[2])
+		y1 = min(c[1], c[3])
+		y2 = max(c[1], c[3])
+		w_crop = x_scale * (x2 - x1);
+		h_crop = y_scale * (y2 - y1);
+		x_offset = x_scale * x1;
+		y_offset = y_scale * y1;
+		print("mogrify -crop " + str(round(w_crop)) + "x" + str(round(h_crop)) + "+" + str(round(x_offset)) + "+" + str(round(y_offset)) + " " + sys.argv[cur_img]);
+	root.destroy()
+	sys.exit(0)
+
+def left(event):
+	global cur_img, x_orig, y_orig, x_new, y_new
+	if cur_img <= 1:
+		return
+	cur_img -= 1
+	load_img()
+	if coords[cur_img] != None:
+		x_orig, y_orig, x_new, y_new = coords[cur_img]
+		canvas.create_rectangle(*coords[cur_img])
+	else:
+		x_orig = y_orig = x_new = y_new = 0
+
+def right(event):
+	global cur_img, x_orig, y_orig, x_new, y_new
+	if cur_img >= len(sys.argv) - 1:
+		return
+	cur_img += 1
+	load_img()
+	if cur_img >= len(coords):
+		coords.append(None)
+	if coords[cur_img] != None:
+		x_orig, y_orig, x_new, y_new = coords[cur_img]
+		canvas.create_rectangle(*coords[cur_img])
+	else:
+		x_orig = y_orig = x_new = y_new = 0
+
+def return_event(event):
+	global cur_img, x_orig, x_new, y_orig, y_new
+	if x_orig < 0:
+		x_orig = 0
+	if x_new < 0:
+		x_new = 0
+	if x_orig > w_scaled:
+		x_orig = w_scaled
+	if x_new > w_scaled:
+		x_new = w_scaled
+	if y_orig < 0:
+		y_orig = 0
+	if y_new < 0:
+		y_new = 0
+	if y_orig > h_scaled:
+		y_orig = h_scaled
+	if y_new > h_scaled:
+		y_new = h_scaled
+	if x_orig == x_new or y_orig == y_new:
+		return
+	coords[cur_img] = [x_orig, y_orig, x_new, y_new]
+	if cur_img >= len(sys.argv) - 1:
+		return
+	cur_img += 1
+	load_img()
+	if cur_img >= len(coords):
+		coords.append(None)
+	if coords[cur_img] != None:
+		x_orig, y_orig, x_new, y_new = coords[cur_img]
+		canvas.create_rectangle(*coords[cur_img])
+	else:
+		canvas.create_rectangle(*coords[cur_img-1])
+
+def load_img():
+	global img, w, h, w_scaled, h_scaled, tkimg
+	img = Image.open(sys.argv[cur_img])
+	w, h = img.size
+	img.thumbnail((1278, 760), Image.ANTIALIAS)
+	w_scaled, h_scaled = img.size
+	if cur_img >= len(img_sizes):
+		img_sizes.append([w, h, w_scaled, h_scaled])
+	tkimg = ImageTk.PhotoImage(img);
+	canvas.create_image(0, 0, anchor=tkinter.NW, image=tkimg)
+	root.title(sys.argv[cur_img]);
+
+root = tkinter.Tk()
+
+canvas = tkinter.Canvas(root, width=1278, height=760)
+canvas.pack()
+canvas.bind('<B1-Motion>', motion)
+canvas.bind('<ButtonRelease-1>', release)
+canvas.bind('<ButtonPress-1>', press)
+img, w, h, w_scaled, h_scaled, tkimg = 0, 0, 0, 0, 0, 0
+load_img()
+root.bind('<Return>', return_event)
+root.bind('<Left>', left)
+root.bind('<Right>', right)
+root.bind('<Escape>', print_exit)
+tkinter.mainloop()
diff --git a/everysecond.pl b/everysecond.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+
+# give every second file
+
+use strict;
+use warnings;
+
+my $start = shift;
+my $end = shift;
+
+while ($ARGV[0] ne $start) {
+	shift;
+}
+
+foreach my $i (0..$#ARGV) {
+	if ($i % 2 == 0) {
+		print(" $ARGV[$i]");
+	}
+	if ($ARGV[$i] eq $end) {
+		last;
+	}
+}
diff --git a/fehs.sh b/fehs.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+path=${1#file://}
+feh -. --start-at "$path" `dirname "$path"`
diff --git a/fromto.pl b/fromto.pl
@@ -0,0 +1,20 @@
+#!/usr/bin/env perl
+
+# give every file from first arg to second arg
+
+use strict;
+use warnings;
+
+my $start = shift;
+my $end = shift;
+
+while ($ARGV[0] ne $start) {
+	shift;
+}
+
+foreach my $i (0..$#ARGV) {
+	print(" $ARGV[$i]");
+	if ($ARGV[$i] eq $end) {
+		last;
+	}
+}
diff --git a/sort.pl b/sort.pl
@@ -0,0 +1,15 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use File::Copy qw(copy);
+
+my $destdir = shift;
+my $ext = shift;
+my $i = 1;
+my $digits = length(scalar(@ARGV));
+foreach my $file (@ARGV) {
+	my $dest = sprintf("%0${digits}d.$ext", $i);
+	copy($file, "$destdir/$dest");
+	$i++;
+}
diff --git a/sort2.pl b/sort2.pl
@@ -0,0 +1,23 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use File::Copy qw(copy);
+
+my $destdir = shift;
+my $ext = shift;
+my $i = shift;
+
+if (scalar(@ARGV) % 2) {
+	die "Uneven number of images.\n";
+}
+my $digits = length(scalar(@ARGV));
+my $half = scalar(@ARGV) / 2;
+foreach my $j (0..$half-1) {
+	my $dest = sprintf("%0${digits}d.$ext", $i);
+	copy($ARGV[$j], "$destdir/$dest");
+	$i++;
+	$dest = sprintf("%0${digits}d.$ext", $i);
+	copy($ARGV[$#ARGV-$j], "$destdir/$dest");
+	$i++;
+}