file coloring
Kisel Jan
j.kisel at rambler.ru
Sat Aug 12 23:10:26 UTC 2006
Good day!
I suggest you mc patch to apply file-coloring scheme based on file name pattern.
For using this possibility apply patch, then paste `file_color' variable to [Colors] section of your ~/.mc/ini file, formed like further:
------------
[Colors]
file_color=*.c,*.h,*.cpp=brown,blue:*.gz,*.tar,*.bz2,*.zip,*.rar,*.tgz,*.tbz,*.rpm=cyan,blue:*.avi,*.mpg,*.mp3=green,blue:*.ini,*.conf,*.cfg,*_conf,.*rc,.profile=magenta,blue
-------------
I realize that this patch realization is not well, but I'm sure that idia to inculcate such in mc will please many users.
Patch text (also can be found at ftp://85.21.236.244/pub/patches/mc-4.6.1/patch-fcolors):
--- src/color.orig Fri May 27 18:19:18 2005
+++ src/color.c Mon Jul 10 08:15:40 2006
@@ -165,4 +165,6 @@
"errdhotfocus=yellow,lightgray";
+struct fcolor file_colors[MAX_FILECOLORS];
+
#ifdef HAVE_SLANG
# define color_value(i) color_table [i].name
@@ -250,4 +252,37 @@
}
+/* Configure file-specified colors
+ */
+static void configure_fcolors_string(const char *the_fcolor_string) {
+ char *p, **pf, *scolor;
+ int i = 0;
+ const int start_color = ELEMENTS(color_map);
+ struct colorpair color;
+
+ if (!the_fcolor_string || *the_fcolor_string == 0)
+ return;
+ scolor = (char *)the_fcolor_string;
+
+ while (*scolor && i<MAX_FILECOLORS)
+ {
+ if ((p = strchr(scolor, '=')) != NULL) {
+ /* save mask list */
+ pf = &file_colors[i].fmask[0];
+ *p = 0;
+ *pf = strtok(scolor, ",");
+ while (*pf)
+ *++pf = strtok(NULL, ",");
+
+ scolor = p+1; /* point to color pair (fg,bg) */
+ get_two_colors(&scolor, &color);
+ mc_init_pair (i+start_color, color.fg, color.bg);
+ file_colors[i++].color = i+start_color;
+ } else break;
+ }
+ if (i < MAX_FILECOLORS)
+ file_colors[i].fmask[0] = 0;
+ /*g_free(scolor);*/
+}
+
static void configure_colors (void)
{
@@ -279,4 +314,5 @@
alarm_colors [3] = ERROR_HOT_FOCUS;
}
+static int max_index = 0;
void init_colors (void)
@@ -339,9 +375,9 @@
}
load_dialog_colors ();
+ configure_fcolors_string(setup_fcolor_string);
}
/* Functions necessary to implement syntax highlighting */
-static int max_index = 0;
static int
--- src/color.h.orig Thu Sep 2 02:33:43 2004
+++ src/color.h Mon Jul 10 07:52:37 2006
@@ -95,3 +95,11 @@
int try_alloc_color_pair (const char *fg, const char *bg);
+#define MAX_FILECOLORS 16
+struct fcolor {
+ char *fmask[16];
+ int color;
+};
+
+extern struct fcolor file_colors[];
+
#endif /* __COLOR_H */
--- src/screen.c.orig Fri May 27 18:19:18 2005
+++ src/screen.c Mon Jul 10 08:15:41 2006
@@ -20,4 +20,5 @@
#include <config.h>
+#include <fnmatch.h>
#include <string.h>
#include <stdio.h>
@@ -465,4 +466,6 @@
file_compute_color (int attr, file_entry *fe)
{
+ int setup_fcolor = 1;
+
switch (attr) {
case SELECTED:
@@ -510,4 +513,15 @@
return (CORE_COLOR);
+ if (setup_fcolor) {
+ int i;
+ char **pfm;
+
+ for (i=0; file_colors[i].fmask[0] && i < MAX_FILECOLORS; i++) {
+ pfm = &file_colors[i].fmask[0];
+ for (; *pfm; pfm++)
+ if (!fnmatch(*pfm, fe->fname, FNM_CASEFOLD))
+ return (file_colors[i].color);
+ }
+ }
return (NORMAL_COLOR);
}
--- src/setup.c.orig Fri May 27 18:19:18 2005
+++ src/setup.c Mon Jul 10 05:50:59 2006
@@ -69,4 +69,5 @@
char term_color_string [4096];
char color_terminal_string [512];
+char setup_fcolor_string [4096];
#define load_int(a,b,c) GetPrivateProfileInt(a,b,c,profile_name)
@@ -533,4 +534,7 @@
load_string ("Colors", "color_terminals", "",
color_terminal_string, sizeof (color_terminal_string));
+ /* Load file-specified colors */
+ load_string ("Colors", "file_color", "", setup_fcolor_string,
+ sizeof (setup_fcolor_string));
/* Load the directory history */
--- src/setup.h.orig Sun Aug 29 20:56:16 2004
+++ src/setup.h Mon Jul 10 05:49:43 2006
@@ -21,4 +21,5 @@
extern char term_color_string[];
extern char color_terminal_string[];
+extern char setup_fcolor_string[];
extern int startup_left_mode;
=========================================
Respectfully yours, Kisel Jan aka dkrot (j.kisel at rambler.ru)
More information about the mc-devel
mailing list