浏览代码

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.
master
Arun Prakash Jana 8 年前
父节点
当前提交
2958ecd040
共有 3 个文件被更改,包括 25 次插入19 次删除
  1. +1
    -1
      Makefile
  2. +1
    -0
      config.def.h
  3. +23
    -18
      noice.c

+ 1
- 1
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


+ 1
- 0
config.def.h 查看文件

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


+ 23
- 18
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);


||||||
x
 
000:0
正在加载...
取消
保存