Remove libmagic, use file command.

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.
This commit is contained in:
Arun Prakash Jana 2016-08-21 08:25:12 +05:30
parent 25e1dcaa8b
commit 2958ecd040
3 changed files with 25 additions and 19 deletions

View file

@ -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

View 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" },

37
noice.c
View file

@ -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,13 +653,31 @@ 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);
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);
initcurses();