aboutsummaryrefslogtreecommitdiffstats
path: root/sway/commands/unmark.c
blob: ac2132613d57ba74ac576176aae0fa9a982c2965 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <string.h>
#include <strings.h>
#include "sway/commands.h"
#include "list.h"
#include "stringop.h"

struct cmd_results *cmd_unmark(int argc, char **argv) {
	swayc_t *view = current_container;

	if (view->marks) {
		if (argc) {
			char *mark = join_args(argv, argc);
			int index;
			if ((index = list_seq_find(view->marks, (int (*)(const void *, const void *))strcmp, mark)) != -1) {
				free(view->marks->items[index]);
				list_del(view->marks, index);

				if (view->marks->length == 0) {
					list_free(view->marks);
					view->marks = NULL;
				}
			}
			free(mark);
		} else {
			list_foreach(view->marks, free);
			list_free(view->marks);
			view->marks = NULL;
		}
	}
	return cmd_results_new(CMD_SUCCESS, NULL, NULL);
}