aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Arun Prakash Jana <engineerarun@gmail.com>2016-08-20 20:05:35 +0530
committerGravatar Arun Prakash Jana <engineerarun@gmail.com>2016-08-20 20:05:35 +0530
commitbc731cd9c057c03a1ceaab61fd513b67d2d4c9a9 (patch)
treeaf35bab37f1970d0b024aaf3f9304d678f603bcc
parentbd882d5561d1526b6aa23f5552f114440c7d5620 (diff)
downloadnnn-bc731cd9c057c03a1ceaab61fd513b67d2d4c9a9.tar.gz
Modify file type handling.
Use mpv, fmedia, zathura. Invoke libmagic to identify text files and open with vim. Use xdg-open for unhandled mimes.
-rw-r--r--Makefile3
-rw-r--r--config.def.h11
-rw-r--r--noice.c18
3 files changed, 26 insertions, 6 deletions
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(&regex, 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;
}