diff options
Diffstat (limited to 'noice.c')
| -rw-r--r-- | noice.c | 41 |
1 files changed, 23 insertions, 18 deletions
@@ -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(®ex, 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); |