commit f1996f51ba1744260bba4d7c3aa5d9a84c97236e
parent 862b65a3a02afa19d4998565d4bb438bef3ed2ec
Author: Louis Burda <quent.burda@gmail.com>
Date:   Thu, 16 Mar 2023 13:32:35 +0100
Update liblist and add keybind to sort tracks and tags
Diffstat:
3 files changed, 46 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
@@ -41,7 +41,7 @@ build/%.d: | build;
 include $(DEPS)
 
 $(LIBLIST_A):
-	make -C lib/liblist build/liblist.a
+	make -C lib/liblist DEBUG=1 build/liblist.a
 
 tmus: $(OBJS) $(LIBLIST_A)
 	$(CC) -o tmus $^ $(CFLAGS) $(LDLIBS)
diff --git a/src/main.c b/src/main.c
@@ -40,7 +40,6 @@ init(void)
 	on_exit(cleanup, NULL);
 	signal(SIGINT, stop);
 	signal(SIGTERM, exit);
-	signal(SIGKILL, exit);
 }
 
 void
diff --git a/src/tui.c b/src/tui.c
@@ -1,3 +1,4 @@
+#include <stdbool.h>
 #define NCURSES_WIDECHAR 1
 #define _GNU_SOURCE
 
@@ -53,6 +54,8 @@ static bool toggle_current_tag(void);
 static void select_only_current_tag(void);
 static void seek_next_selected_tag(void);
 static void delete_current_tag(void);
+static bool tag_name_cmp(struct link *l1, struct link *l2);
+static void sort_visible_tags(void);
 static bool tag_pane_input(wint_t c);
 static void tag_pane_vis(struct pane *pane, int sel);
 
@@ -63,6 +66,8 @@ static bool rename_current_track(void);
 static bool delete_current_track(void);
 static void queue_current_track(void);
 static void unqueue_last_track(void);
+static bool track_vis_name_cmp(struct link *l1, struct link *l2);
+static void sort_visible_tracks(void);
 static bool track_pane_input(wint_t c);
 static void track_pane_vis(struct pane *pane, int sel);
 
@@ -416,6 +421,23 @@ delete_current_tag(void)
 }
 
 bool
+tag_name_cmp(struct link *l1, struct link *l2)
+{
+	struct tag *t1, *t2;
+
+	t1 = LINK_UPCAST(l1, struct tag, link);
+	t2 = LINK_UPCAST(l2, struct tag, link);
+
+	return strcmp(t1->name, t2->name) <= 0;
+}
+
+void
+sort_visible_tags(void)
+{
+	list_sort(&tags, false, tag_name_cmp);
+}
+
+bool
 tag_pane_input(wint_t c)
 {
 	switch (c) {
@@ -452,6 +474,9 @@ tag_pane_input(wint_t c)
 	case L'D': /* delete tag */
 		delete_current_tag();
 		break;
+	case KEY_CTRL(L's'):
+		sort_visible_tags();
+		break;
 	default:
 		return false;
 	}
@@ -622,6 +647,23 @@ unqueue_last_track(void)
 }
 
 bool
+track_vis_name_cmp(struct link *l1, struct link *l2)
+{
+	struct track *t1, *t2;
+
+	t1 = tracks_vis_track(l1);
+	t2 = tracks_vis_track(l2);
+
+	return strcmp(t1->name, t2->name) <= 0;
+}
+
+void
+sort_visible_tracks(void)
+{
+	list_sort(tracks_vis, false, track_vis_name_cmp);
+}
+
+bool
 track_pane_input(wint_t c)
 {
 	switch (c) {
@@ -663,6 +705,9 @@ track_pane_input(wint_t c)
 	case L'D': /* delete track */
 		delete_current_track();
 		break;
+	case KEY_CTRL(L's'): /* sort track in view */
+		sort_visible_tracks();
+		break;
 	default:
 		return false;
 	}