50
50
code2color (gint code) {
52
case 30: return &black;
54
case 32: return &green;
55
case 33: return &yellow;
56
case 34: return &blue;
57
case 35: return &magenta;
58
case 36: return &cyan;
59
case 37: return &white;
61
case 40: return &black;
63
case 42: return &green;
64
case 43: return &yellow;
65
case 44: return &blue;
66
case 45: return &magenta;
67
case 46: return &cyan;
68
case 47: return &white;
52
case 30: return &black;
54
case 32: return &green;
55
case 33: return &yellow;
56
case 34: return &blue;
57
case 35: return &magenta;
58
case 36: return &cyan;
59
case 37: return &white;
61
case 40: return &black;
63
case 42: return &green;
64
case 43: return &yellow;
65
case 44: return &blue;
66
case 45: return &magenta;
67
case 46: return &cyan;
68
case 47: return &white;
76
76
ext_color (gchar *key, gchar *val)
81
ret = sscanf (val, "%d;%d;%d", &n[0], &n[1], &n[2]);
85
do {key++;} while (key[0] == '.');
86
col = g_new (LsColor, 1);
87
col->type = GNOME_VFS_FILE_TYPE_REGULAR;
88
col->ext = g_strdup (key);
92
for ( i=0 ; i<ret ; i++ ) {
93
if (n[i] >= 30 && n[i] <= 37)
94
col->fg = code2color (n[i]);
95
else if (n[i] >= 40 && n[i] <= 47)
96
col->bg = code2color (n[i]);
81
ret = sscanf (val, "%d;%d;%d", &n[0], &n[1], &n[2]);
85
do {key++;} while (key[0] == '.');
86
col = g_new (LsColor, 1);
87
col->type = GNOME_VFS_FILE_TYPE_REGULAR;
88
col->ext = g_strdup (key);
92
for ( i=0 ; i<ret ; i++ ) {
93
if (n[i] >= 30 && n[i] <= 37)
94
col->fg = code2color (n[i]);
95
else if (n[i] >= 40 && n[i] <= 47)
96
col->bg = code2color (n[i]);
104
104
type_color (gchar *key, gchar *val)
107
LsColor *col = g_new (LsColor, 1);
112
if (strcmp (key, "fi") == 0)
113
col->type = GNOME_VFS_FILE_TYPE_REGULAR;
114
else if (strcmp (key, "di") == 0)
115
col->type = GNOME_VFS_FILE_TYPE_DIRECTORY;
116
else if (strcmp (key, "pi") == 0)
117
col->type = GNOME_VFS_FILE_TYPE_FIFO;
118
else if (strcmp (key, "so") == 0)
119
col->type = GNOME_VFS_FILE_TYPE_SOCKET;
120
else if (strcmp (key, "bd") == 0)
121
col->type = GNOME_VFS_FILE_TYPE_BLOCK_DEVICE;
122
else if (strcmp (key, "cd") == 0)
123
col->type = GNOME_VFS_FILE_TYPE_CHARACTER_DEVICE;
124
else if (strcmp (key, "ln") == 0)
125
col->type = GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK;
131
ret = sscanf (val, "%d;%d;%d", &n[0], &n[1], &n[2]);
132
for ( i=0 ; i<ret ; i++ ) {
133
if (n[i] >= 30 && n[i] <= 37)
134
col->fg = code2color (n[i]);
135
else if (n[i] >= 40 && n[i] <= 47)
136
col->bg = code2color (n[i]);
107
LsColor *col = g_new (LsColor, 1);
112
if (strcmp (key, "fi") == 0)
113
col->type = GNOME_VFS_FILE_TYPE_REGULAR;
114
else if (strcmp (key, "di") == 0)
115
col->type = GNOME_VFS_FILE_TYPE_DIRECTORY;
116
else if (strcmp (key, "pi") == 0)
117
col->type = GNOME_VFS_FILE_TYPE_FIFO;
118
else if (strcmp (key, "so") == 0)
119
col->type = GNOME_VFS_FILE_TYPE_SOCKET;
120
else if (strcmp (key, "bd") == 0)
121
col->type = GNOME_VFS_FILE_TYPE_BLOCK_DEVICE;
122
else if (strcmp (key, "cd") == 0)
123
col->type = GNOME_VFS_FILE_TYPE_CHARACTER_DEVICE;
124
else if (strcmp (key, "ln") == 0)
125
col->type = GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK;
131
ret = sscanf (val, "%d;%d;%d", &n[0], &n[1], &n[2]);
132
for ( i=0 ; i<ret ; i++ ) {
133
if (n[i] >= 30 && n[i] <= 37)
134
col->fg = code2color (n[i]);
135
else if (n[i] >= 40 && n[i] <= 47)
136
col->bg = code2color (n[i]);
144
144
create_color (gchar *ls_color)
146
gchar **s, *key, *val;
149
s = g_strsplit (ls_color, "=", 0);
146
gchar **s, *key, *val;
149
s = g_strsplit (ls_color, "=", 0);
155
col = ext_color (key, val);
157
col = type_color (key, val);
155
col = ext_color (key, val);
157
col = type_color (key, val);
166
166
init (gchar *ls_colors)
171
ents = g_strsplit (ls_colors, ":", 0);
177
col = create_color (ents[i]);
180
g_hash_table_insert (map, col->ext, col);
182
type_colors[col->type] = col;
171
ents = g_strsplit (ls_colors, ":", 0);
177
col = create_color (ents[i]);
180
g_hash_table_insert (map, col->ext, col);
182
type_colors[col->type] = col;
191
191
void ls_colors_init (void)
193
gchar *s = getenv ("LS_COLORS");
197
map = g_hash_table_new (g_str_hash, g_str_equal);
193
gchar *s = getenv ("LS_COLORS");
197
map = g_hash_table_new (g_str_hash, g_str_equal);
202
202
LsColor *ls_colors_get (GnomeCmdFile *finfo)
207
if (finfo->info->symlink_name)
208
return type_colors[GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK];
210
ext = gnome_cmd_file_get_extension (finfo);
212
col = g_hash_table_lookup (map, ext);
215
col = type_colors[finfo->info->type];
207
if (finfo->info->symlink_name)
208
return type_colors[GNOME_VFS_FILE_TYPE_SYMBOLIC_LINK];
210
ext = gnome_cmd_file_get_extension (finfo);
212
col = g_hash_table_lookup (map, ext);
215
col = type_colors[finfo->info->type];