-
Notifications
You must be signed in to change notification settings - Fork 0
/
colors.hh
146 lines (119 loc) · 3.68 KB
/
colors.hh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/* `dir', `vdir' and `ls' directory listing programs for GNU.
Modified by Chet Ramey for Readline.
Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015
Free Software Foundation, Inc.
This program 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 3 of the License, or
(at your option) any later version.
This program 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, see <http://www.gnu.org/licenses/>. */
/* Written by Richard Stallman and David MacKenzie. */
/* Color support by Peter Anvin <[email protected]> and Dennis
Flaherty <[email protected]> based on original patches by
Greg Lee <[email protected]>. */
#ifndef _COLORS_H_
#define _COLORS_H_
#include <stdio.h> // size_t
#if defined(__TANDEM) && defined(HAVE_STDBOOL_H) && \
(__STDC_VERSION__ < 199901L)
typedef int _Bool;
#endif
#if defined(HAVE_STDBOOL_H)
#include <stdbool.h> // bool
#else
typedef int _rl_bool_t;
#ifdef bool
#undef bool
#endif
#define bool _rl_bool_t
#ifndef true
#define true 1
#define false 0
#endif
#endif /* !HAVE_STDBOOL_H */
/* Null is a valid character in a color indicator (think about Epson
printers, for example) so we have to use a length/buffer string
type. */
struct bin_str
{
size_t len;
const char* string;
};
/* file type indicators (dir, sock, fifo, ...)
Default value is initialized in parse-colors.c.
It is then modified from the values of $LS_COLORS. */
extern struct bin_str _rl_color_indicator[];
/* The LS_COLORS variable is in a termcap-like format. */
typedef struct _color_ext_type
{
struct bin_str ext; /* The extension we're looking for */
struct bin_str seq; /* The sequence to output when we do */
struct _color_ext_type* next; /* Next in list */
} COLOR_EXT_TYPE;
/* file extensions indicators (.txt, .log, .jpg, ...)
Values are taken from $LS_COLORS in rl_parse_colors(). */
extern COLOR_EXT_TYPE* _rl_color_ext_list;
#define FILETYPE_INDICATORS \
{ \
C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE, C_LINK, C_SOCK, \
C_FILE, C_DIR \
}
/* Whether we used any colors in the output so far. If so, we will
need to restore the default color later. If not, we will need to
call prep_non_filename_text before using color for the first time. */
enum indicator_no
{
C_LEFT,
C_RIGHT,
C_END,
C_RESET,
C_NORM,
C_FILE,
C_DIR,
C_LINK,
C_FIFO,
C_SOCK,
C_BLK,
C_CHR,
C_MISSING,
C_ORPHAN,
C_EXEC,
C_DOOR,
C_SETUID,
C_SETGID,
C_STICKY,
C_OTHER_WRITABLE,
C_STICKY_OTHER_WRITABLE,
C_CAP,
C_MULTIHARDLINK,
C_CLR_TO_EOL
};
#if !S_IXUGO
#define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH)
#endif
enum filetype
{
unknown,
fifo,
chardev,
directory,
blockdev,
normal,
symbolic_link,
sock,
whiteout,
arg_directory
};
/* Prefix color, currently same as socket */
#define C_PREFIX C_SOCK
extern void _rl_put_indicator(const struct bin_str* ind);
extern void _rl_set_normal_color(void);
extern bool _rl_print_prefix_color(void);
extern bool _rl_print_color_indicator(const char* f);
extern void _rl_prep_non_filename_text(void);
#endif /* !_COLORS_H_ */