mirror of https://github.com/MidnightCommander/mc
Ticket #418: File coloring
Added support of filenames highlighting in panels. Now rules of highlighting described into external file filehighlight.ini Number of highlight rules is unlimited (in opposite to X-Stranger patch). Highlight will made by: * file type (directory, regular, symlink, special device etc.) * extensions of filenames (ends of filenames) * regular expressions Big thanks to X-Stranger <x@linux.by> for idea and to Alexey Kaminsky <alexeykaminsky@gmail.com> for testing. Signed-off-by: Slava Zanko <slavazanko@gmail.com>
This commit is contained in:
parent
bf7b330f34
commit
4afc04eedc
|
@ -559,6 +559,7 @@ misc/Makefile
|
||||||
misc/mc.ext
|
misc/mc.ext
|
||||||
|
|
||||||
src/Makefile
|
src/Makefile
|
||||||
|
src/filehighlight/Makefile
|
||||||
src/mcconfig/Makefile
|
src/mcconfig/Makefile
|
||||||
src/search/Makefile
|
src/search/Makefile
|
||||||
src/tty/Makefile
|
src/tty/Makefile
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
Main section [filehighlight] contain key names as highlight groups and values as color pairs
|
||||||
|
color pair described as 'foreground;background'. 'background' may be omited.
|
||||||
|
|
||||||
|
other sections describe filegroup of highlight.
|
||||||
|
Keys in these groups:
|
||||||
|
|
||||||
|
type
|
||||||
|
- file type. if present, all other option ignored;
|
||||||
|
regexp
|
||||||
|
- regular expression. If present, 'extensions' option ignored;
|
||||||
|
extensions
|
||||||
|
- list of extensions of files. Separated by ';' sign.
|
||||||
|
|
||||||
|
'type' key may have values:
|
||||||
|
|
||||||
|
- FILE - all files.
|
||||||
|
- FILE_EXE
|
||||||
|
- DIR - all directoryes
|
||||||
|
- LINK_DIR
|
||||||
|
- LINK (all links except stale link)
|
||||||
|
- HARDLINK
|
||||||
|
- SYMLINK
|
||||||
|
- STALE_LINK
|
||||||
|
- DEVICE (all device files)
|
||||||
|
- DEVICE_BLOCK
|
||||||
|
- DEVICE_CHAR
|
||||||
|
- SPECIAL (all special files)
|
||||||
|
- SPECIAL_SOCKET
|
||||||
|
- SPECIAL_FIFO
|
||||||
|
- SPECIAL_DOOR
|
|
@ -11,6 +11,7 @@ LIBFILES_CONST = \
|
||||||
edit.indent.rc \
|
edit.indent.rc \
|
||||||
edit.spell.rc \
|
edit.spell.rc \
|
||||||
mc.lib \
|
mc.lib \
|
||||||
|
filehighlight.ini \
|
||||||
mc.menu
|
mc.menu
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
[filehighlight]
|
||||||
|
directory=white;
|
||||||
|
executable=brightgreen;
|
||||||
|
symlink=lightgray;
|
||||||
|
stalelink=brightred;
|
||||||
|
device=brightmagenta;
|
||||||
|
special=black;
|
||||||
|
core=red;
|
||||||
|
|
||||||
|
temp=gray;
|
||||||
|
archive=brightmagenta;
|
||||||
|
hidden=black;
|
||||||
|
doc=brown;
|
||||||
|
source=cyan;
|
||||||
|
media=green;
|
||||||
|
graph=brightcyan;
|
||||||
|
database=brightred;
|
||||||
|
|
||||||
|
[executable]
|
||||||
|
type=FILE_EXE
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
type=DIR
|
||||||
|
|
||||||
|
[symlink]
|
||||||
|
type=SYMLINK
|
||||||
|
|
||||||
|
[stalelink]
|
||||||
|
type=STALE_LINK
|
||||||
|
|
||||||
|
[device]
|
||||||
|
type=DEVICE
|
||||||
|
|
||||||
|
[special]
|
||||||
|
type=SPECIAL
|
||||||
|
|
||||||
|
[core]
|
||||||
|
regexp=^core\\.\\d+$
|
||||||
|
|
||||||
|
[temp]
|
||||||
|
extensions=tmp;$$$;~;bak
|
||||||
|
|
||||||
|
[archive]
|
||||||
|
extensions=gz;bz2;tar;tgz;rpm;Z;rar;zip;arj;cab;lzh;lha;zoo;arc;ark
|
||||||
|
|
||||||
|
[hidden]
|
||||||
|
regexp=^\\..*
|
||||||
|
|
||||||
|
[doc]
|
||||||
|
extensions=txt;doc;rtf;diz;ctl;me;ps;pdf;xml;xsd;xslt;dtd;html;shtml;htm;mail;msg;lsm;po;nroff;man;tex;sgml;css;text;letter
|
||||||
|
|
||||||
|
[source]
|
||||||
|
extensions=c;h;cc;hh;cpp;hpp;asm;py;pl;pm;inc;cgi;php;phps;js;java;jav;jasm;sh;bash;diff;patch;pas;tcl;tk;awk;m4;st;mak;sl;ada;caml;ml;mli;mly;mll;mlp;sas;prg
|
||||||
|
|
||||||
|
[media]
|
||||||
|
extensions=mp2;mp3;mpg;ogg;mpeg;wav;avi;asf;mov;mol;mpl;xm;mod;it;med;mid;midi;s3m;umx;vob
|
||||||
|
|
||||||
|
[graph]
|
||||||
|
extensions=jpg;jpeg;gif;png;tif;pcx;bmp;xpm;xbm;eps;pic;rle;ico;wmf;omf;ai;cdr
|
||||||
|
|
||||||
|
[database]
|
||||||
|
extensions=dbf;mdn;db;mdb;dat;fox;dbx;mdx;sql;mssql;msql;ssql;pgsql;xls;cdx;dbi
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
SUBDIRS = mcconfig search tty viewer
|
SUBDIRS = mcconfig search tty viewer filehighlight
|
||||||
|
|
||||||
AM_CFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) $(PCRE_CFLAGS)
|
AM_CFLAGS = $(GLIB_CFLAGS) -I$(top_srcdir) $(PCRE_CFLAGS)
|
||||||
|
|
||||||
|
@ -43,8 +43,9 @@ MCCONFIGLIB = mcconfig/libmcconfig.la
|
||||||
SEARCHLIB = search/libsearch.la
|
SEARCHLIB = search/libsearch.la
|
||||||
TTYLIB = tty/libmctty.la
|
TTYLIB = tty/libmctty.la
|
||||||
VIEWERLIB = viewer/libmcviewer.la
|
VIEWERLIB = viewer/libmcviewer.la
|
||||||
|
FILEHIGHLIGHTLIB=filehighlight/libmcfilehighlight.la
|
||||||
|
|
||||||
mc_LDADD = $(EDITLIB) $(VFSLIB) \
|
mc_LDADD = $(EDITLIB) $(VFSLIB) $(FILEHIGHLIGHTLIB) \
|
||||||
$(MCCONFIGLIB) $(SEARCHLIB) $(TTYLIB) $(VIEWERLIB) \
|
$(MCCONFIGLIB) $(SEARCHLIB) $(TTYLIB) $(VIEWERLIB) \
|
||||||
$(INTLLIBS) $(MCLIBS) $(SLANGLIB) $(LIBICONV) $(GLIB_LIBS)
|
$(INTLLIBS) $(MCLIBS) $(SLANGLIB) $(LIBICONV) $(GLIB_LIBS)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
noinst_LTLIBRARIES = libmcfilehighlight.la
|
||||||
|
|
||||||
|
libmcfilehighlight_la_SOURCES = \
|
||||||
|
common.c \
|
||||||
|
fhl.h \
|
||||||
|
get-color.c \
|
||||||
|
ini-file-read.c \
|
||||||
|
internal.h
|
||||||
|
|
||||||
|
libmcfilehighlight_la_CFLAGS=-I../ -I$(top_srcdir)/src \
|
||||||
|
$(GLIB_CFLAGS) $(PCRE_CFLAGS) \
|
||||||
|
-DDATADIR=\""$(pkgdatadir)/"\" -DLOCALEDIR=\""$(localedir)"\"
|
||||||
|
|
||||||
|
libmcfilehighlight_la_LIBADD = $(PCRE_LIBS)
|
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
File highlight plugin.
|
||||||
|
Interface functions
|
||||||
|
|
||||||
|
Copyright (C) 2009 The Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Written by:
|
||||||
|
Slava Zanko <slavazanko@gmail.com>, 2009.
|
||||||
|
|
||||||
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
|
The Midnight Commander is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Midnight Commander is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "../src/global.h"
|
||||||
|
#include "../src/filehighlight/fhl.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
/*** global variables ****************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope macro definitions ****************************************************************/
|
||||||
|
|
||||||
|
/*** file scope type declarations ****************************************************************/
|
||||||
|
|
||||||
|
/*** file scope variables ************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope functions ************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
mc_fhl_array_free (mc_fhl_t * fhl)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
mc_fhl_filter_t *mc_filter;
|
||||||
|
|
||||||
|
if (fhl->filters == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (i = 0; i < fhl->filters->len; i++) {
|
||||||
|
mc_filter = (mc_fhl_filter_t *) g_ptr_array_index (fhl->filters, i);
|
||||||
|
|
||||||
|
g_free (mc_filter->fgcolor);
|
||||||
|
g_free (mc_filter->bgcolor);
|
||||||
|
|
||||||
|
if (mc_filter->search_condition != NULL)
|
||||||
|
mc_search_free (mc_filter->search_condition);
|
||||||
|
|
||||||
|
g_free (mc_filter);
|
||||||
|
}
|
||||||
|
g_ptr_array_free (fhl->filters, TRUE);
|
||||||
|
fhl->filters = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
/*** public functions ****************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
mc_fhl_t *
|
||||||
|
mc_fhl_new (gboolean need_auto_fill)
|
||||||
|
{
|
||||||
|
|
||||||
|
mc_fhl_t *fhl;
|
||||||
|
|
||||||
|
fhl = g_new0 (mc_fhl_t, 1);
|
||||||
|
if (fhl == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!need_auto_fill)
|
||||||
|
return fhl;
|
||||||
|
|
||||||
|
if (!mc_fhl_init_from_standart_files (fhl)) {
|
||||||
|
g_free (fhl);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mc_fhl_parce_ini_file (fhl)) {
|
||||||
|
mc_fhl_free (&fhl);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fhl;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
mc_fhl_free (mc_fhl_t ** fhl)
|
||||||
|
{
|
||||||
|
if (fhl == NULL || *fhl == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mc_fhl_clear (*fhl);
|
||||||
|
|
||||||
|
g_free (*fhl);
|
||||||
|
*fhl = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
void
|
||||||
|
mc_fhl_clear (mc_fhl_t * fhl)
|
||||||
|
{
|
||||||
|
if (fhl == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (fhl->config)
|
||||||
|
mc_config_deinit (fhl->config);
|
||||||
|
|
||||||
|
mc_fhl_array_free (fhl);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef MC__FILEHIGHLIGHT_H
|
||||||
|
#define MC__FILEHIGHLIGHT_H
|
||||||
|
|
||||||
|
#include "../../src/mcconfig/mcconfig.h"
|
||||||
|
#include "../../src/search/search.h"
|
||||||
|
#include "../src/dir.h"
|
||||||
|
|
||||||
|
/*** typedefs(not structures) and defined constants **********************************************/
|
||||||
|
|
||||||
|
/*** enums ***************************************************************************************/
|
||||||
|
|
||||||
|
/*** structures declarations (and typedefs of structures)*****************************************/
|
||||||
|
|
||||||
|
typedef struct mc_fhl_struct {
|
||||||
|
mc_config_t *config;
|
||||||
|
GPtrArray *filters;
|
||||||
|
} mc_fhl_t;
|
||||||
|
|
||||||
|
/*** global variables defined in .c file *********************************************************/
|
||||||
|
|
||||||
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
|
mc_fhl_t *mc_fhl_new (gboolean);
|
||||||
|
void mc_fhl_free (mc_fhl_t **);
|
||||||
|
|
||||||
|
int mc_fhl_get_color (mc_fhl_t *, file_entry *);
|
||||||
|
|
||||||
|
gboolean mc_fhl_read_ini_file (mc_fhl_t *, const gchar *);
|
||||||
|
gboolean mc_fhl_parce_ini_file (mc_fhl_t *);
|
||||||
|
void mc_fhl_clear (mc_fhl_t *);
|
||||||
|
|
||||||
|
#endif
|
|
@ -0,0 +1,251 @@
|
||||||
|
/*
|
||||||
|
File highlight plugin.
|
||||||
|
Interface functions. get color pair index for highlighted file.
|
||||||
|
|
||||||
|
Copyright (C) 2009 The Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Written by:
|
||||||
|
Slava Zanko <slavazanko@gmail.com>, 2009.
|
||||||
|
|
||||||
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
|
The Midnight Commander is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Midnight Commander is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "../src/global.h"
|
||||||
|
#include "../src/util.h"
|
||||||
|
#include "../src/tty/color.h"
|
||||||
|
#include "../src/filehighlight/fhl.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
/*** global variables ****************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope macro definitions ****************************************************************/
|
||||||
|
|
||||||
|
/*** file scope type declarations ****************************************************************/
|
||||||
|
|
||||||
|
/*** file scope variables ************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope functions ************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
/*inline functions*/
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_file (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISREG (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_file_exec (file_entry * fe)
|
||||||
|
{
|
||||||
|
return is_exe (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_dir (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISDIR (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_link (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISLNK (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_link_to_dir (file_entry * fe)
|
||||||
|
{
|
||||||
|
return mc_fhl_is_link (fe) && (fe->f.link_to_dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_stale_link (file_entry * fe)
|
||||||
|
{
|
||||||
|
return mc_fhl_is_link (fe) && (fe->f.stale_link);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_device_char (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISCHR (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_device_block (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISBLK (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_special_socket (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISSOCK (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_special_fifo (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISFIFO (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_special_door (file_entry * fe)
|
||||||
|
{
|
||||||
|
return S_ISDOOR (fe->st.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
inline static gboolean
|
||||||
|
mc_fhl_is_special (file_entry * fe)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
(mc_fhl_is_special_socket (fe) || mc_fhl_is_special_fifo (fe) || mc_fhl_is_special_door (fe)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static int
|
||||||
|
mc_fhl_get_color_filetype (mc_fhl_filter_t * mc_filter, mc_fhl_t * fhl, file_entry * fe)
|
||||||
|
{
|
||||||
|
gboolean my_color = FALSE;
|
||||||
|
|
||||||
|
switch (mc_filter->file_type) {
|
||||||
|
case MC_FLHGH_FTYPE_T_FILE:
|
||||||
|
if (mc_fhl_is_file (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_FILE_EXE:
|
||||||
|
if ((mc_fhl_is_file (fe)) && (mc_fhl_is_file_exec (fe)))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_DIR:
|
||||||
|
if (mc_fhl_is_dir (fe) || mc_fhl_is_link_to_dir (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_LINK_DIR:
|
||||||
|
if (mc_fhl_is_link_to_dir (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_LINK:
|
||||||
|
if (mc_fhl_is_link (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_HARDLINK:
|
||||||
|
/*TODO: hanlde it */
|
||||||
|
if (mc_fhl_is_link (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_SYMLINK:
|
||||||
|
/*TODO: hanlde it */
|
||||||
|
if (mc_fhl_is_link (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_STALE_LINK:
|
||||||
|
if (mc_fhl_is_stale_link (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_DEVICE:
|
||||||
|
if ((mc_fhl_is_device_char (fe)) || (mc_fhl_is_device_block (fe)))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_DEVICE_BLOCK:
|
||||||
|
if (mc_fhl_is_device_block (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_DEVICE_CHAR:
|
||||||
|
if (mc_fhl_is_device_char (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_SPECIAL:
|
||||||
|
if (mc_fhl_is_special (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_SPECIAL_SOCKET:
|
||||||
|
if (mc_fhl_is_special_socket (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_SPECIAL_FIFO:
|
||||||
|
if (mc_fhl_is_special_fifo (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_FTYPE_T_SPECIAL_DOOR:
|
||||||
|
if (mc_fhl_is_special_door (fe))
|
||||||
|
my_color = TRUE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (my_color) ? mc_filter->color_pair_index : -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static int
|
||||||
|
mc_fhl_get_color_regexp (mc_fhl_filter_t * mc_filter, mc_fhl_t * fhl, file_entry * fe)
|
||||||
|
{
|
||||||
|
if (mc_filter->search_condition == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (mc_search_run (mc_filter->search_condition, fe->fname, 0, strlen (fe->fname), NULL))
|
||||||
|
return mc_filter->color_pair_index;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
/*** public functions ****************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
mc_fhl_get_color (mc_fhl_t * fhl, file_entry * fe)
|
||||||
|
{
|
||||||
|
guint i;
|
||||||
|
mc_fhl_filter_t *mc_filter;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
|
||||||
|
if (fhl == NULL)
|
||||||
|
return NORMAL_COLOR;
|
||||||
|
|
||||||
|
for (i = 0; i < fhl->filters->len; i++) {
|
||||||
|
mc_filter = (mc_fhl_filter_t *) g_ptr_array_index (fhl->filters, i);
|
||||||
|
switch (mc_filter->type) {
|
||||||
|
case MC_FLHGH_T_FTYPE:
|
||||||
|
ret = mc_fhl_get_color_filetype (mc_filter, fhl, fe);
|
||||||
|
if (ret > 0)
|
||||||
|
return -ret;
|
||||||
|
break;
|
||||||
|
case MC_FLHGH_T_EXT:
|
||||||
|
case MC_FLHGH_T_FREGEXP:
|
||||||
|
ret = mc_fhl_get_color_regexp (mc_filter, fhl, fe);
|
||||||
|
if (ret > 0)
|
||||||
|
return -ret;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NORMAL_COLOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
|
@ -0,0 +1,303 @@
|
||||||
|
/*
|
||||||
|
File highlight plugin.
|
||||||
|
Reading and parce rules from ini-files
|
||||||
|
|
||||||
|
Copyright (C) 2009 The Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
Written by:
|
||||||
|
Slava Zanko <slavazanko@gmail.com>, 2009.
|
||||||
|
|
||||||
|
This file is part of the Midnight Commander.
|
||||||
|
|
||||||
|
The Midnight Commander is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the
|
||||||
|
License, or (at your option) any later version.
|
||||||
|
|
||||||
|
The Midnight Commander is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty
|
||||||
|
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
MA 02110-1301, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "../src/global.h"
|
||||||
|
#include "../src/main.h"
|
||||||
|
#include "../src/strescape.h"
|
||||||
|
#include "../src/tty/color.h"
|
||||||
|
#include "../src/filehighlight/fhl.h"
|
||||||
|
#include "internal.h"
|
||||||
|
|
||||||
|
/*** global variables ****************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope macro definitions ****************************************************************/
|
||||||
|
|
||||||
|
#define mc_fhl_INI_FILE "filehighlight.ini"
|
||||||
|
|
||||||
|
/*** file scope type declarations ****************************************************************/
|
||||||
|
|
||||||
|
/*** file scope variables ************************************************************************/
|
||||||
|
|
||||||
|
/*** file scope functions ************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static void
|
||||||
|
mc_fhl_parce_fill_color_info (mc_fhl_filter_t * mc_filter, mc_fhl_t * fhl, const gchar * group_name)
|
||||||
|
{
|
||||||
|
gchar **colors;
|
||||||
|
gsize colors_size;
|
||||||
|
|
||||||
|
colors = mc_config_get_string_list (fhl->config, "filehighlight", group_name, &colors_size);
|
||||||
|
|
||||||
|
if (colors == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (colors[0] == NULL) {
|
||||||
|
g_strfreev (colors);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mc_filter->fgcolor = g_strdup (colors[0]);
|
||||||
|
|
||||||
|
if (colors[1] == NULL)
|
||||||
|
mc_filter->bgcolor = NULL;
|
||||||
|
else
|
||||||
|
mc_filter->bgcolor = g_strdup (colors[1]);
|
||||||
|
|
||||||
|
g_strfreev (colors);
|
||||||
|
|
||||||
|
mc_filter->color_pair_index = tty_try_alloc_color_pair (mc_filter->fgcolor, mc_filter->bgcolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
mc_fhl_parce_get_file_type_id (mc_fhl_t * fhl, const gchar * group_name)
|
||||||
|
{
|
||||||
|
mc_fhl_filter_t *mc_filter;
|
||||||
|
|
||||||
|
const gchar *types[] = {
|
||||||
|
"FILE", "FILE_EXE",
|
||||||
|
"DIR", "LINK_DIR",
|
||||||
|
"LINK", "HARDLINK", "SYMLINK",
|
||||||
|
"STALE_LINK",
|
||||||
|
"DEVICE", "DEVICE_BLOCK", "DEVICE_CHAR",
|
||||||
|
"SPECIAL", "SPECIAL_SOCKET", "SPECIAL_FIFO", "SPECIAL_DOOR",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
gchar *param_type = mc_config_get_string (fhl->config, group_name, "type", "");
|
||||||
|
|
||||||
|
if (*param_type == '\0') {
|
||||||
|
g_free (param_type);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; types[i] != NULL; i++) {
|
||||||
|
if (strcmp (types[i], param_type) == 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
g_free (param_type);
|
||||||
|
if (types[i] == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
mc_filter = g_new0 (mc_fhl_filter_t, 1);
|
||||||
|
mc_filter->type = MC_FLHGH_T_FTYPE;
|
||||||
|
mc_filter->file_type = (mc_flhgh_ftype_type) i;
|
||||||
|
mc_fhl_parce_fill_color_info (mc_filter, fhl, group_name);
|
||||||
|
|
||||||
|
g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
mc_fhl_parce_get_regexp (mc_fhl_t * fhl, const gchar * group_name)
|
||||||
|
{
|
||||||
|
mc_fhl_filter_t *mc_filter;
|
||||||
|
gchar *regexp = mc_config_get_string (fhl->config, group_name, "regexp", "");
|
||||||
|
|
||||||
|
if (*regexp == '\0') {
|
||||||
|
g_free (regexp);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
mc_filter = g_new0 (mc_fhl_filter_t, 1);
|
||||||
|
mc_filter->type = MC_FLHGH_T_FREGEXP;
|
||||||
|
mc_filter->search_condition = mc_search_new (regexp, -1);
|
||||||
|
mc_filter->search_condition->is_case_sentitive = TRUE;
|
||||||
|
mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX;
|
||||||
|
|
||||||
|
mc_fhl_parce_fill_color_info (mc_filter, fhl, group_name);
|
||||||
|
g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
|
||||||
|
g_free (regexp);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
mc_fhl_parce_get_extensions (mc_fhl_t * fhl, const gchar * group_name)
|
||||||
|
{
|
||||||
|
mc_fhl_filter_t *mc_filter;
|
||||||
|
gchar **exts, **exts_orig;
|
||||||
|
gchar *esc_ext;
|
||||||
|
gsize exts_size;
|
||||||
|
GString *buf = g_string_new ("");
|
||||||
|
|
||||||
|
exts_orig = exts =
|
||||||
|
mc_config_get_string_list (fhl->config, group_name, "extensions", &exts_size);
|
||||||
|
|
||||||
|
if (exts_orig == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (exts_orig[0] == NULL) {
|
||||||
|
g_strfreev (exts_orig);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (*exts != NULL) {
|
||||||
|
esc_ext = strutils_regex_escape (*exts);
|
||||||
|
if (buf->len != 0)
|
||||||
|
g_string_append_c (buf, '|');
|
||||||
|
g_string_append (buf, esc_ext);
|
||||||
|
g_free (esc_ext);
|
||||||
|
exts++;
|
||||||
|
}
|
||||||
|
g_strfreev (exts_orig);
|
||||||
|
esc_ext = g_string_free (buf, FALSE);
|
||||||
|
buf = g_string_new (".*\\.(");
|
||||||
|
g_string_append (buf, esc_ext);
|
||||||
|
g_string_append (buf, ")$");
|
||||||
|
g_free (esc_ext);
|
||||||
|
|
||||||
|
mc_filter = g_new0 (mc_fhl_filter_t, 1);
|
||||||
|
mc_filter->type = MC_FLHGH_T_FREGEXP;
|
||||||
|
mc_filter->search_condition = mc_search_new (buf->str, -1);
|
||||||
|
mc_filter->search_condition->is_case_sentitive = TRUE;
|
||||||
|
mc_filter->search_condition->search_type = MC_SEARCH_T_REGEX;
|
||||||
|
|
||||||
|
mc_fhl_parce_fill_color_info (mc_filter, fhl, group_name);
|
||||||
|
g_ptr_array_add (fhl->filters, (gpointer) mc_filter);
|
||||||
|
g_string_free (buf, TRUE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
/*** public functions ****************************************************************************/
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mc_fhl_read_ini_file (mc_fhl_t * fhl, const gchar * filename)
|
||||||
|
{
|
||||||
|
if (fhl == NULL || filename == NULL || !exist_file (filename))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (fhl->config) {
|
||||||
|
|
||||||
|
if (!mc_config_read_file (fhl->config, filename))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fhl->config = mc_config_init (filename);
|
||||||
|
|
||||||
|
if (fhl->config == NULL)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mc_fhl_init_from_standart_files (mc_fhl_t * fhl)
|
||||||
|
{
|
||||||
|
gchar *name;
|
||||||
|
gchar *user_mc_dir;
|
||||||
|
|
||||||
|
/* ${datadir}/mc/filehighlight.ini */
|
||||||
|
name = concat_dir_and_file (mc_home_alt, mc_fhl_INI_FILE);
|
||||||
|
if (exist_file (name) && (!mc_fhl_read_ini_file (fhl, name))) {
|
||||||
|
g_free (name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
g_free (name);
|
||||||
|
|
||||||
|
/* ${sysconfdir}/mc/filehighlight.ini */
|
||||||
|
name = concat_dir_and_file (mc_home, mc_fhl_INI_FILE);
|
||||||
|
if (exist_file (name) && (!mc_fhl_read_ini_file (fhl, name))) {
|
||||||
|
g_free (name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
g_free (name);
|
||||||
|
|
||||||
|
/* ~/.mc/filehighlight.ini */
|
||||||
|
user_mc_dir = concat_dir_and_file (home_dir, MC_BASE);
|
||||||
|
name = concat_dir_and_file (user_mc_dir, mc_fhl_INI_FILE);
|
||||||
|
g_free (user_mc_dir);
|
||||||
|
if (exist_file (name) && (!mc_fhl_read_ini_file (fhl, name))) {
|
||||||
|
g_free (name);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
g_free (name);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
mc_fhl_parce_ini_file (mc_fhl_t * fhl)
|
||||||
|
{
|
||||||
|
gchar **ftype_names, **orig_ftype_names;
|
||||||
|
gsize ftype_names_size;
|
||||||
|
|
||||||
|
|
||||||
|
mc_fhl_array_free (fhl);
|
||||||
|
fhl->filters = g_ptr_array_new ();
|
||||||
|
|
||||||
|
if (!mc_config_has_group (fhl->config, "filehighlight"))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
orig_ftype_names = ftype_names =
|
||||||
|
mc_config_get_keys (fhl->config, "filehighlight", &ftype_names_size);
|
||||||
|
|
||||||
|
while (*ftype_names) {
|
||||||
|
|
||||||
|
if (!mc_config_has_group (fhl->config, *ftype_names)) {
|
||||||
|
ftype_names++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mc_config_has_param (fhl->config, *ftype_names, "type")) {
|
||||||
|
/* parce filetype filter */
|
||||||
|
mc_fhl_parce_get_file_type_id (fhl, *ftype_names);
|
||||||
|
} else if (mc_config_has_param (fhl->config, *ftype_names, "regexp")) {
|
||||||
|
/* parce regexp filter */
|
||||||
|
mc_fhl_parce_get_regexp (fhl, *ftype_names);
|
||||||
|
} else if (mc_config_has_param (fhl->config, *ftype_names, "extensions")) {
|
||||||
|
/* parce extensions filter */
|
||||||
|
mc_fhl_parce_get_extensions (fhl, *ftype_names);
|
||||||
|
}
|
||||||
|
|
||||||
|
ftype_names++;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_strfreev (orig_ftype_names);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --------------------------------------------------------------------------------------------- */
|
|
@ -0,0 +1,55 @@
|
||||||
|
#ifndef MC__FILEHIGHLIGHT_INTERNAL_H
|
||||||
|
#define MC__FILEHIGHLIGHT_INTERNAL_H
|
||||||
|
|
||||||
|
/*** typedefs(not structures) and defined constants **********************************************/
|
||||||
|
|
||||||
|
/*** enums ***************************************************************************************/
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MC_FLHGH_T_FTYPE,
|
||||||
|
MC_FLHGH_T_EXT,
|
||||||
|
MC_FLHGH_T_FREGEXP
|
||||||
|
} mc_flhgh_filter_type;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
MC_FLHGH_FTYPE_T_FILE,
|
||||||
|
MC_FLHGH_FTYPE_T_FILE_EXE,
|
||||||
|
MC_FLHGH_FTYPE_T_DIR,
|
||||||
|
MC_FLHGH_FTYPE_T_LINK_DIR,
|
||||||
|
MC_FLHGH_FTYPE_T_LINK,
|
||||||
|
MC_FLHGH_FTYPE_T_HARDLINK,
|
||||||
|
MC_FLHGH_FTYPE_T_SYMLINK,
|
||||||
|
MC_FLHGH_FTYPE_T_STALE_LINK,
|
||||||
|
MC_FLHGH_FTYPE_T_DEVICE,
|
||||||
|
MC_FLHGH_FTYPE_T_DEVICE_BLOCK,
|
||||||
|
MC_FLHGH_FTYPE_T_DEVICE_CHAR,
|
||||||
|
MC_FLHGH_FTYPE_T_SPECIAL,
|
||||||
|
MC_FLHGH_FTYPE_T_SPECIAL_SOCKET,
|
||||||
|
MC_FLHGH_FTYPE_T_SPECIAL_FIFO,
|
||||||
|
MC_FLHGH_FTYPE_T_SPECIAL_DOOR,
|
||||||
|
} mc_flhgh_ftype_type;
|
||||||
|
|
||||||
|
/*** structures declarations (and typedefs of structures)*****************************************/
|
||||||
|
|
||||||
|
typedef struct mc_fhl_filter_struct {
|
||||||
|
|
||||||
|
int color_pair_index;
|
||||||
|
gchar *fgcolor;
|
||||||
|
gchar *bgcolor;
|
||||||
|
mc_flhgh_filter_type type;
|
||||||
|
mc_search_t *search_condition;
|
||||||
|
mc_flhgh_ftype_type file_type;
|
||||||
|
|
||||||
|
} mc_fhl_filter_t;
|
||||||
|
|
||||||
|
/*** global variables defined in .c file *********************************************************/
|
||||||
|
|
||||||
|
/*** declarations of public functions ************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
void mc_fhl_array_free (mc_fhl_t *);
|
||||||
|
|
||||||
|
gboolean mc_fhl_init_from_standart_files (mc_fhl_t *);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -49,6 +49,7 @@
|
||||||
|
|
||||||
#include "../src/mcconfig/mcconfig.h"
|
#include "../src/mcconfig/mcconfig.h"
|
||||||
#include "../src/args.h"
|
#include "../src/args.h"
|
||||||
|
#include "../src/filehighlight/fhl.h"
|
||||||
|
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "dialog.h"
|
#include "dialog.h"
|
||||||
|
@ -107,6 +108,8 @@
|
||||||
WPanel *left_panel = NULL;
|
WPanel *left_panel = NULL;
|
||||||
WPanel *right_panel = NULL;
|
WPanel *right_panel = NULL;
|
||||||
|
|
||||||
|
mc_fhl_t *mc_filehighlight;
|
||||||
|
|
||||||
/* The pointer to the tree */
|
/* The pointer to the tree */
|
||||||
WTree *the_tree = NULL;
|
WTree *the_tree = NULL;
|
||||||
|
|
||||||
|
@ -1994,10 +1997,12 @@ main (int argc, char *argv[])
|
||||||
#endif /* HAVE_SUBSHELL_SUPPORT */
|
#endif /* HAVE_SUBSHELL_SUPPORT */
|
||||||
prompt = (geteuid () == 0) ? "# " : "$ ";
|
prompt = (geteuid () == 0) ? "# " : "$ ";
|
||||||
|
|
||||||
|
mc_filehighlight = mc_fhl_new (TRUE);
|
||||||
/* Program main loop */
|
/* Program main loop */
|
||||||
if (!midnight_shutdown)
|
if (!midnight_shutdown)
|
||||||
do_nc ();
|
do_nc ();
|
||||||
|
|
||||||
|
mc_fhl_free (&mc_filehighlight);
|
||||||
/* Save the tree store */
|
/* Save the tree store */
|
||||||
tree_store_save ();
|
tree_store_save ();
|
||||||
|
|
||||||
|
|
|
@ -104,6 +104,10 @@ extern const char *prompt;
|
||||||
extern const char *edit_one_file;
|
extern const char *edit_one_file;
|
||||||
extern char *mc_home;
|
extern char *mc_home;
|
||||||
extern char *mc_home_alt;
|
extern char *mc_home_alt;
|
||||||
|
|
||||||
|
struct mc_fhl_struct;
|
||||||
|
extern struct mc_fhl_struct *mc_filehighlight;
|
||||||
|
|
||||||
char *get_mc_lib_dir (void);
|
char *get_mc_lib_dir (void);
|
||||||
|
|
||||||
void done_menu (void);
|
void done_menu (void);
|
||||||
|
|
42
src/screen.c
42
src/screen.c
|
@ -37,6 +37,7 @@
|
||||||
#include "../src/tty/color.h"
|
#include "../src/tty/color.h"
|
||||||
#include "../src/tty/mouse.h" /* For Gpm_Event */
|
#include "../src/tty/mouse.h" /* For Gpm_Event */
|
||||||
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
#include "../src/tty/key.h" /* XCTRL and ALT macros */
|
||||||
|
#include "../src/filehighlight/fhl.h"
|
||||||
|
|
||||||
#include "dir.h"
|
#include "dir.h"
|
||||||
#include "panel.h"
|
#include "panel.h"
|
||||||
|
@ -158,8 +159,10 @@ add_permission_string (char *dest, int width, file_entry *fe, int attr, int colo
|
||||||
tty_setcolor (MARKED_SELECTED_COLOR);
|
tty_setcolor (MARKED_SELECTED_COLOR);
|
||||||
else
|
else
|
||||||
tty_setcolor (MARKED_COLOR);
|
tty_setcolor (MARKED_COLOR);
|
||||||
} else
|
} else if (color >= 0)
|
||||||
tty_setcolor (color);
|
tty_setcolor (color);
|
||||||
|
else
|
||||||
|
tty_lowlevel_setcolor (-color);
|
||||||
|
|
||||||
tty_print_char (dest[i]);
|
tty_print_char (dest[i]);
|
||||||
}
|
}
|
||||||
|
@ -470,37 +473,7 @@ file_compute_color (int attr, file_entry *fe)
|
||||||
return (NORMAL_COLOR);
|
return (NORMAL_COLOR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if filetype_mode == true */
|
return mc_fhl_get_color (mc_filehighlight, fe);
|
||||||
if (S_ISDIR (fe->st.st_mode))
|
|
||||||
return (DIRECTORY_COLOR);
|
|
||||||
else if (S_ISLNK (fe->st.st_mode)) {
|
|
||||||
if (fe->f.link_to_dir)
|
|
||||||
return (DIRECTORY_COLOR);
|
|
||||||
else if (fe->f.stale_link)
|
|
||||||
return (STALE_LINK_COLOR);
|
|
||||||
else
|
|
||||||
return (LINK_COLOR);
|
|
||||||
} else if (S_ISSOCK (fe->st.st_mode))
|
|
||||||
return (SPECIAL_COLOR);
|
|
||||||
else if (S_ISCHR (fe->st.st_mode))
|
|
||||||
return (DEVICE_COLOR);
|
|
||||||
else if (S_ISBLK (fe->st.st_mode))
|
|
||||||
return (DEVICE_COLOR);
|
|
||||||
else if (S_ISNAM (fe->st.st_mode))
|
|
||||||
return (DEVICE_COLOR);
|
|
||||||
else if (S_ISFIFO (fe->st.st_mode))
|
|
||||||
return (SPECIAL_COLOR);
|
|
||||||
else if (S_ISDOOR (fe->st.st_mode))
|
|
||||||
return (SPECIAL_COLOR);
|
|
||||||
else if (!S_ISREG (fe->st.st_mode))
|
|
||||||
return (STALE_LINK_COLOR); /* non-regular file of unknown kind */
|
|
||||||
else if (is_exe (fe->st.st_mode))
|
|
||||||
return (EXECUTABLE_COLOR);
|
|
||||||
else if (fe->fname && (!strcmp (fe->fname, "core")
|
|
||||||
|| !strcmp (extension (fe->fname), "core")))
|
|
||||||
return (CORE_COLOR);
|
|
||||||
|
|
||||||
return (NORMAL_COLOR);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Formats the file number file_index of panel in the buffer dest */
|
/* Formats the file number file_index of panel in the buffer dest */
|
||||||
|
@ -551,7 +524,10 @@ format_file (char *dest, int limit, WPanel *panel, int file_index, int width, in
|
||||||
perm = 2;
|
perm = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
tty_setcolor (color);
|
if (color >= 0)
|
||||||
|
tty_setcolor (color);
|
||||||
|
else
|
||||||
|
tty_lowlevel_setcolor (-color);
|
||||||
|
|
||||||
preperad_text = (char*) str_fit_to_term(txt, len, format->just_mode);
|
preperad_text = (char*) str_fit_to_term(txt, len, format->just_mode);
|
||||||
if (perm)
|
if (perm)
|
||||||
|
|
|
@ -79,29 +79,20 @@ struct colorpair color_map [] = {
|
||||||
{ "gauge=", 0, 0 }, /* Color of the progress bar (percentage) *//* 21 */
|
{ "gauge=", 0, 0 }, /* Color of the progress bar (percentage) *//* 21 */
|
||||||
{ "input=", 0, 0 },
|
{ "input=", 0, 0 },
|
||||||
|
|
||||||
/* Per file types colors */
|
{ 0, 0, 0 }, /* not usable (DEFAULT_COLOR_INDEX) *//* 23 */
|
||||||
{ "directory=", 0, 0 }, /* 23 */
|
|
||||||
{ "executable=", 0, 0 },
|
|
||||||
{ "link=", 0, 0 }, /* symbolic link (neither stale nor link to directory) */
|
|
||||||
{ "stalelink=", 0, 0 }, /* stale symbolic link */
|
|
||||||
{ "device=", 0, 0 },
|
|
||||||
{ "special=", 0, 0 }, /* sockets, fifo */
|
|
||||||
{ "core=", 0, 0 }, /* core files */ /* 29 */
|
|
||||||
|
|
||||||
{ 0, 0, 0 }, /* not usable (DEFAULT_COLOR_INDEX) *//* 30 */
|
|
||||||
{ 0, 0, 0 }, /* unused */
|
{ 0, 0, 0 }, /* unused */
|
||||||
{ 0, 0, 0 }, /* not usable (A_REVERSE) */
|
{ 0, 0, 0 }, /* not usable (A_REVERSE) */
|
||||||
{ 0, 0, 0 }, /* not usable (A_REVERSE_BOLD) */
|
{ 0, 0, 0 }, /* not usable (A_REVERSE_BOLD) */
|
||||||
|
|
||||||
/* editor colors start at 34 */
|
/* editor colors start at 27 */
|
||||||
{ "editnormal=", 0, 0 }, /* normal */ /* 34 */
|
{ "editnormal=", 0, 0 }, /* normal */ /* 27 */
|
||||||
{ "editbold=", 0, 0 }, /* search->found */
|
{ "editbold=", 0, 0 }, /* search->found */
|
||||||
{ "editmarked=", 0, 0 }, /* marked/selected */
|
{ "editmarked=", 0, 0 }, /* marked/selected */
|
||||||
{ "editwhitespace=", 0, 0 }, /* whitespace */
|
{ "editwhitespace=", 0, 0 }, /* whitespace */
|
||||||
{ "editlinestate=", 0, 0 }, /* line number bar*/
|
{ "editlinestate=", 0, 0 }, /* line number bar*/
|
||||||
|
|
||||||
/* error dialog colors start at 39 */
|
/* error dialog colors start at 32 */
|
||||||
{ "errdhotnormal=", 0, 0 }, /* Error dialog normal/hot */ /* 38 */
|
{ "errdhotnormal=", 0, 0 }, /* Error dialog normal/hot */ /* 32 */
|
||||||
{ "errdhotfocus=", 0, 0 }, /* Error dialog focused/hot */
|
{ "errdhotfocus=", 0, 0 }, /* Error dialog focused/hot */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -76,13 +76,6 @@ static const char default_colors[] = {
|
||||||
"helpslink=yellow,blue:"
|
"helpslink=yellow,blue:"
|
||||||
"gauge=white,black:"
|
"gauge=white,black:"
|
||||||
"input=black,cyan:"
|
"input=black,cyan:"
|
||||||
"directory=white,blue:"
|
|
||||||
"executable=brightgreen,blue:"
|
|
||||||
"link=lightgray,blue:"
|
|
||||||
"stalelink=brightred,blue:"
|
|
||||||
"device=brightmagenta,blue:"
|
|
||||||
"core=red,blue:"
|
|
||||||
"special=black,blue:"
|
|
||||||
"editnormal=lightgray,blue:"
|
"editnormal=lightgray,blue:"
|
||||||
"editbold=yellow,blue:"
|
"editbold=yellow,blue:"
|
||||||
"editmarked=black,cyan:"
|
"editmarked=black,cyan:"
|
||||||
|
|
|
@ -48,18 +48,8 @@
|
||||||
#define GAUGE_COLOR IF_COLOR (21, 0)
|
#define GAUGE_COLOR IF_COLOR (21, 0)
|
||||||
#define INPUT_COLOR IF_COLOR (22, 0)
|
#define INPUT_COLOR IF_COLOR (22, 0)
|
||||||
|
|
||||||
/* Add this to color panel, on BW all pairs are normal */
|
|
||||||
#define DIRECTORY_COLOR IF_COLOR (23, 0)
|
|
||||||
#define EXECUTABLE_COLOR IF_COLOR (24, 0)
|
|
||||||
#define LINK_COLOR IF_COLOR (25, 0)
|
|
||||||
#define STALE_LINK_COLOR IF_COLOR (26, 0)
|
|
||||||
#define DEVICE_COLOR IF_COLOR (27, 0)
|
|
||||||
#define SPECIAL_COLOR IF_COLOR (28, 0)
|
|
||||||
#define CORE_COLOR IF_COLOR (29, 0)
|
|
||||||
|
|
||||||
|
|
||||||
/* For the default color any unused index may be chosen. */
|
/* For the default color any unused index may be chosen. */
|
||||||
#define DEFAULT_COLOR_INDEX 30
|
#define DEFAULT_COLOR_INDEX 23
|
||||||
#define DEFAULT_COLOR IF_COLOR (DEFAULT_COLOR_INDEX, 0)
|
#define DEFAULT_COLOR IF_COLOR (DEFAULT_COLOR_INDEX, 0)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -67,18 +57,18 @@
|
||||||
* respectively
|
* respectively
|
||||||
* Last is defined to view color.
|
* Last is defined to view color.
|
||||||
*/
|
*/
|
||||||
#define EDITOR_NORMAL_COLOR_INDEX 34
|
#define EDITOR_NORMAL_COLOR_INDEX 27
|
||||||
#define EDITOR_NORMAL_COLOR IF_COLOR (EDITOR_NORMAL_COLOR_INDEX, 0)
|
#define EDITOR_NORMAL_COLOR IF_COLOR (EDITOR_NORMAL_COLOR_INDEX, 0)
|
||||||
#define EDITOR_BOLD_COLOR IF_COLOR (35, A_BOLD)
|
#define EDITOR_BOLD_COLOR IF_COLOR (28, A_BOLD)
|
||||||
#define EDITOR_MARKED_COLOR IF_COLOR (36, A_REVERSE)
|
#define EDITOR_MARKED_COLOR IF_COLOR (29, A_REVERSE)
|
||||||
#define EDITOR_WHITESPACE_COLOR IF_COLOR (37, 0 /* irrelevant */)
|
#define EDITOR_WHITESPACE_COLOR IF_COLOR (30, 0 /* irrelevant */)
|
||||||
|
|
||||||
/* color of left 8 char status per line */
|
/* color of left 8 char status per line */
|
||||||
#define LINE_STATE_COLOR IF_COLOR (38, 0)
|
#define LINE_STATE_COLOR IF_COLOR (31, 0)
|
||||||
|
|
||||||
/* Error dialog colors */
|
/* Error dialog colors */
|
||||||
#define ERROR_HOT_NORMAL IF_COLOR (39, 0)
|
#define ERROR_HOT_NORMAL IF_COLOR (32, 0)
|
||||||
#define ERROR_HOT_FOCUS IF_COLOR (40, 0)
|
#define ERROR_HOT_FOCUS IF_COLOR (43, 0)
|
||||||
|
|
||||||
void tty_init_colors (gboolean disable, gboolean force);
|
void tty_init_colors (gboolean disable, gboolean force);
|
||||||
void tty_colors_done (void);
|
void tty_colors_done (void);
|
||||||
|
|
Loading…
Reference in New Issue