]> Sergey Matveev's repositories - nnn.git/commitdiff
Remove libmagic, use file command.
authorArun Prakash Jana <engineerarun@gmail.com>
Sun, 21 Aug 2016 02:55:12 +0000 (08:25 +0530)
committerArun Prakash Jana <engineerarun@gmail.com>
Sun, 21 Aug 2016 04:24:51 +0000 (09:54 +0530)
The magic.mgc file gets created in the local directory, opening
the global file throws unwanted messages. So we are using the o/p
of the file command to determine if the file is a plain text file.

Makefile
config.def.h
noice.c

index de973b9bd57e4a23e2ee85aa18c779ef5e1bc886..b293e4f73260cbab925c08a63fb03541103fb485 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@ MANPREFIX = $(PREFIX)/man
 #CPPFLAGS = -DDEBUG
 #CFLAGS = -g
 CFLAGS = -O3 -march=native
-LDLIBS = -lcurses -lmagic
+LDLIBS = -lcurses
 
 DISTFILES = noice.c strlcat.c strlcpy.c util.h config.def.h\
     noice.1 Makefile README LICENSE
index b9f6741b4c7c165358ca3579899e9d58645557a7..663351a9090a0a7aab7a18e47cc097a57e080e87 100644 (file)
@@ -9,6 +9,7 @@ char *idlecmd = "rain"; /* The screensaver program */
 
 struct assoc assocs[] = {
        //{ "\\.(avi|mp4|mkv|mp3|ogg|flac|mov)$", "mpv" },
+       { "\\.(c|cpp|h|txt|log)$", "vim" },
        { "\\.(wma|mp3|ogg|flac)$", "fmedia" },
        //{ "\\.(png|jpg|gif)$", "feh" },
        //{ "\\.(html|svg)$", "firefox" },
diff --git a/noice.c b/noice.c
index 9e679a8bca5d55f8893fc263abcda233596efc2d..30ccf4df006b2fc48410db9df1c3c230cd5d42d9 100644 (file)
--- a/noice.c
+++ b/noice.c
@@ -17,7 +17,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <magic.h>
 
 #include "util.h"
 
@@ -39,6 +38,7 @@
 #define MIN(x, y) ((x) < (y) ? (x) : (y))
 #define ISODD(x) ((x) & 1)
 #define CONTROL(c) ((c) ^ 0x40)
+#define MAX_PATH_LEN 1024
 
 struct assoc {
        char *regex; /* Regex to match on filename */
@@ -208,19 +208,6 @@ 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)
-               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)
@@ -666,12 +653,30 @@ nochange:
                                goto begin;
                        case S_IFREG:
                                bin = openwith(newpath);
+                               char *execvim = "vim";
+
                                if (bin == NULL) {
-                                       char cmd[512];
+                                       FILE *fp;
+                                       char cmd[MAX_PATH_LEN];
                                        int status;
-                                       sprintf(cmd, "xdg-open \"%s\" > /dev/null 2>&1", newpath);
-                                       status = system(cmd);
-                                       continue;
+
+                                       snprintf(cmd, MAX_PATH_LEN, "file \"%s\"", newpath);
+                                       fp = popen(cmd, "r");
+                                       if (fp == NULL)
+                                               goto nochange;
+                                       if (fgets(cmd, MAX_PATH_LEN, fp) == NULL) {
+                                               pclose(fp);
+                                               goto nochange;
+                                       }
+                                       pclose(fp);
+
+                                       if (strstr(cmd, "ASCII text") != NULL)
+                                               bin = execvim;
+                                       else {
+                                               snprintf(cmd, MAX_PATH_LEN, "xdg-open \"%s\" > /dev/null 2>&1", newpath);
+                                               status = system(cmd);
+                                               continue;
+                                       }
                                }
                                exitcurses();
                                spawn(bin, newpath, NULL);