diff --git a/Makefile b/Makefile index 9035141..ed7a2c4 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,8 @@ MANPREFIX = $(PREFIX)/man #CPPFLAGS = -DDEBUG #CFLAGS = -g -LDLIBS = -lcurses +CFLAGS = -O3 -march=native +LDLIBS = -lcurses -lmagic DISTFILES = noice.c strlcat.c strlcpy.c util.h config.def.h\ noice.1 Makefile README LICENSE diff --git a/config.def.h b/config.def.h index af9bcbb..b9f6741 100644 --- a/config.def.h +++ b/config.def.h @@ -8,12 +8,13 @@ int idletimeout = 0; /* Screensaver timeout in seconds, 0 to disable */ char *idlecmd = "rain"; /* The screensaver program */ struct assoc assocs[] = { - { "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mplayer" }, - { "\\.(png|jpg|gif)$", "feh" }, - { "\\.(html|svg)$", "firefox" }, - { "\\.pdf$", "mupdf" }, + //{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mpv" }, + { "\\.(wma|mp3|ogg|flac)$", "fmedia" }, + //{ "\\.(png|jpg|gif)$", "feh" }, + //{ "\\.(html|svg)$", "firefox" }, + { "\\.pdf$", "zathura" }, { "\\.sh$", "sh" }, - { ".", "less" }, + //{ ".", "less" }, }; struct key bindings[] = { diff --git a/noice.c b/noice.c index a588a55..4db6f7f 100644 --- a/noice.c +++ b/noice.c @@ -17,6 +17,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <magic.h> #include "util.h" @@ -207,6 +208,20 @@ openwith(char *file) char *bin = NULL; int i; + const char *mime; + magic_t magic; + + magic = magic_open(MAGIC_MIME_TYPE); + magic_load(magic, NULL); + magic_compile(magic, NULL); + mime = magic_file(magic, file); + DPRINTF_S(mime); + + if (strcmp(mime, "text/plain") == 0) + magic_close(magic); + return "vim"; + magic_close(magic); + for (i = 0; i < LEN(assocs); i++) { if (regcomp(®ex, assocs[i].regex, REG_NOSUB | REG_EXTENDED | REG_ICASE) != 0) @@ -650,6 +665,9 @@ nochange: case S_IFREG: bin = openwith(newpath); if (bin == NULL) { + char cmd[512]; + sprintf(cmd, "xdg-open \"%s\" > /dev/null 2>&1", newpath); + system(cmd); printmsg("No association"); goto nochange; }