|
@@ -7,6 +7,9 @@ slrn::Options::Options() {
|
7
|
7
|
m_padding = 0;
|
8
|
8
|
m_xdisplay = ":0";
|
9
|
9
|
m_tolerance = 4;
|
|
10
|
+ m_red = 0;
|
|
11
|
+ m_green = 0;
|
|
12
|
+ m_blue = 0;
|
10
|
13
|
}
|
11
|
14
|
|
12
|
15
|
void slrn::Options::printHelp() {
|
|
@@ -19,8 +22,9 @@ void slrn::Options::printHelp() {
|
19
|
22
|
printf( " -p=INT, --m_padding=INT set m_padding size for selection.\n" );
|
20
|
23
|
printf( " -t=INT, --tolerance=INT if you have a shaky mouse, increasing this value will make slrn detect single clicks better. Rather than interpreting your shaky clicks as region selections.\n" );
|
21
|
24
|
printf( " -x=STRING, --xdisplay=STRING set x display (STRING must be hostname:number.screen_number format)\n" );
|
|
25
|
+ printf( " -c=COLOR, --color=COLOR set selection rectangle color, COLOR is in format FLOAT,FLOAT,FLOAT\n" );
|
22
|
26
|
printf( "examples\n" );
|
23
|
|
- printf( " slrn -b=10 -x=:0 -p=-30 -t=4\n" );
|
|
27
|
+ printf( " slrn -b=10 -x=:0 -p=-30 -t=4 -c=0.5,0.5,0.5\n" );
|
24
|
28
|
}
|
25
|
29
|
|
26
|
30
|
int slrn::Options::parseOptions( int argc, char** argv ) {
|
|
@@ -41,6 +45,11 @@ int slrn::Options::parseOptions( int argc, char** argv ) {
|
41
|
45
|
if ( err ) {
|
42
|
46
|
return 1;
|
43
|
47
|
}
|
|
48
|
+ } else if ( matches( arg, "-c=", "--color=" ) ) {
|
|
49
|
+ int err = parseColor( arg, &m_red, &m_green, &m_blue );
|
|
50
|
+ if ( err ) {
|
|
51
|
+ return 1;
|
|
52
|
+ }
|
44
|
53
|
} else if ( matches( arg, "-t=", "--tolerance=" ) ) {
|
45
|
54
|
int err = parseInt( arg, &m_tolerance );
|
46
|
55
|
if ( err ) {
|
|
@@ -122,3 +131,26 @@ int slrn::Options::parseString( std::string arg, std::string* returnString ) {
|
122
|
131
|
delete[] y;
|
123
|
132
|
return 0;
|
124
|
133
|
}
|
|
134
|
+
|
|
135
|
+int slrn::Options::parseColor( std::string arg, float* r, float* g, float* b ) {
|
|
136
|
+ std::string copy = arg;
|
|
137
|
+ int find = copy.find( "=" );
|
|
138
|
+ while( find != copy.npos ) {
|
|
139
|
+ copy.at( find ) = ' ';
|
|
140
|
+ find = copy.find( "," );
|
|
141
|
+ }
|
|
142
|
+
|
|
143
|
+ // Just in case we error out, grab the actual argument name into x.
|
|
144
|
+ char* x = new char[ arg.size() ];
|
|
145
|
+ int num = sscanf( copy.c_str(), "%s %f %f %f", x, r, g, b );
|
|
146
|
+ if ( num != 4 ) {
|
|
147
|
+ fprintf( stderr, "Error parsing command arguments near %s\n", arg.c_str() );
|
|
148
|
+ fprintf( stderr, "Usage: %s=COLOR\n", x );
|
|
149
|
+ fprintf( stderr, "Example: %s=0,0,0 or %s=0.7,0.2,1\n", x, x );
|
|
150
|
+ fprintf( stderr, "Try -h or --help for help.\n" );
|
|
151
|
+ delete[] x;
|
|
152
|
+ return 1;
|
|
153
|
+ }
|
|
154
|
+ delete[] x;
|
|
155
|
+ return 0;
|
|
156
|
+}
|