From bc731cd9c057c03a1ceaab61fd513b67d2d4c9a9 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Sat, 20 Aug 2016 20:05:35 +0530 Subject: [PATCH] Modify file type handling. Use mpv, fmedia, zathura. Invoke libmagic to identify text files and open with vim. Use xdg-open for unhandled mimes. --- Makefile | 3 ++- config.def.h | 11 ++++++----- noice.c | 18 ++++++++++++++++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 9035141d..ed7a2c4e 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 af9bcbb6..b9f6741b 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 a588a55c..4db6f7f1 100644 --- a/noice.c +++ b/noice.c @@ -17,6 +17,7 @@ #include #include #include +#include #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; }