bee 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,131 @@
1
+ # Copyright 2006 Michel Casabianca <casa@sweetohm.net>
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ # Default bee context. This script is evaluated before getting binding
16
+ # for context, thus all defined functions are accessible in scripts
17
+ # that run in targets. Furthermore, last evaluated expression is a
18
+ # mapping of extension tasks.
19
+
20
+ ############################ UTILITY FUNCTIONS ############################
21
+
22
+ # Convenient method to raise a BuildError.
23
+ # - message: error message.
24
+ def error(message)
25
+ raise BuildError.new(message)
26
+ end
27
+
28
+ # Check a task parameters. Raise a RuntimeError with explanation message if
29
+ # a mandatory parameter is missing or an unknown parameter was found.
30
+ # - params: task parameters as a Hash.
31
+ # - description: parameters description as a Hash associating a parameter
32
+ # name with symbol :mandatory or :optional.
33
+ def check_parameters(params, description)
34
+ error "Parameters must be a Hash" unless params.kind_of?(Hash)
35
+ for param in description.keys
36
+ error "Missing mandatory parameter '#{param}'" unless
37
+ params[param] or description[param] == :optional
38
+ end
39
+ for param in params.keys
40
+ error "Unknown parameter '#{param}'" if not description.key?(param)
41
+ end
42
+ end
43
+
44
+ # Run a shell script and raise an exception if script returned a value
45
+ # different of 0.
46
+ # - script: script to run.
47
+ def sh(script)
48
+ system(script) or error "Script '#{script}' exited with value '#{$?}'"
49
+ end
50
+
51
+ # Find files that match a given pattern.
52
+ # - pattern: pattern to select files.
53
+ # - base: base directory for search.
54
+ # - dir: tells if we must include directories.
55
+ # Return: a file list.
56
+ def find(pattern=//, base='.', dir=true)
57
+ require 'find'
58
+ files = []
59
+ Find.find(base) do |path|
60
+ if path =~ pattern and (File.file?(path) or (File.directory?(path) and dir))
61
+ files << path
62
+ end
63
+ end
64
+ return files
65
+ end
66
+
67
+ ############################ TASK DEFINITIONS #############################
68
+
69
+ # Prints a message.
70
+ def print(message)
71
+ error "Parameter must be a String" unless message.kind_of?(String)
72
+ puts evaluate_string(message)
73
+ end
74
+
75
+ # Make a directory and parent directories if necessary.
76
+ def mkdir(dir)
77
+ error "Parameter must be a String" unless dir.kind_of?(String)
78
+ require "fileutils"
79
+ FileUtils.makedirs(dir)
80
+ end
81
+
82
+ # Run an ERB file or source and store result in a file or property.
83
+ def erb(params)
84
+ require 'erb'
85
+ # check parameters
86
+ params_desc = {
87
+ 'source' => :optional,
88
+ 'file' => :optional,
89
+ 'tofile' => :optional,
90
+ 'toprop' => :optional
91
+ }
92
+ check_parameters(params, params_desc)
93
+ source = params['source']
94
+ file = evaluate_string(params['file'])
95
+ tofile = evaluate_string(params['tofile'])
96
+ toprop = evaluate_string(params['toprop'])
97
+ error "Must pass one of 'source' or 'file' parameters to erb task" if
98
+ not source and not file
99
+ error "Must pass one of 'tofile' or 'toprop' parameters to erb task" if
100
+ not tofile and not toprop
101
+ # load ERB source
102
+ erb_source = source||File.read(file)
103
+ template = ERB.new(erb_source)
104
+ begin
105
+ result = template.result(@context_binding)
106
+ rescue
107
+ error "Error processing ERB: #{$!}"
108
+ end
109
+ # write result in file or set property
110
+ if tofile
111
+ File.open(tofile, 'w') { |file| file.write(result) }
112
+ else
113
+ set(toprop, result)
114
+ end
115
+ end
116
+
117
+ ############################## TASKS MAPPING ##############################
118
+
119
+ {
120
+ "print" =>
121
+ "Print a message passed as parameter.",
122
+ "mkdir" =>
123
+ "Create a directory and all parent directories if necessary. Do nothing if
124
+ directory already exists. Parameter is a String for directory to create.",
125
+ "erb" =>
126
+ "Run an ERB:
127
+ - source: ERB source to run (if no 'file').
128
+ - file: ERB file to run (if no 'source').
129
+ - tofile: file where to write ERB result (if no 'toprop').
130
+ - toprop: bee property where to put result (if no 'tofile')."
131
+ }
@@ -16,13 +16,13 @@
16
16
 
17
17
  require 'test/unit'
18
18
  $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
19
- require 'bee'
19
+ require 'bee_console'
20
20
 
21
21
  class TestBeeConsoleFormatter < Test::Unit::TestCase
22
22
 
23
23
  def test_format_target_default
24
24
  expected = "#{'-'*72} TEST --"
25
- formatter = Bee::ConsoleFormatter.new(nil)
25
+ formatter = Bee::Console::Formatter.new(nil)
26
26
  target = Bee::Target.new({ 'target' => 'TEST' }, nil)
27
27
  actual = formatter.format_target(target)
28
28
  assert_equal(expected, actual)
@@ -37,7 +37,7 @@ class TestBeeConsoleFormatter < Test::Unit::TestCase
37
37
  :target_foreground => :red,
38
38
  :target_background => :green
39
39
  }
40
- formatter = Bee::ConsoleFormatter.new(style)
40
+ formatter = Bee::Console::Formatter.new(style)
41
41
  target = Bee::Target.new({ 'target' => 'TEST' }, nil)
42
42
  actual = formatter.format_target(target)
43
43
  assert_equal(expected, actual)
@@ -18,11 +18,9 @@
18
18
  # in a single test suite.
19
19
 
20
20
  require 'find'
21
- $:.unshift(File.dirname(__FILE__))
22
21
 
23
22
  Find.find(File.dirname(__FILE__)) do |path|
24
- file = File.split(path)[1]
25
- if File.file?(path) and file =~ /^tc_.+\.rb$/
26
- load file
23
+ if File.file?(path) and path =~ /tc_.+\.rb$/
24
+ load path
27
25
  end
28
26
  end
metadata CHANGED
@@ -3,9 +3,9 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: bee
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.1
7
- date: 2006-11-02 00:00:00 +01:00
8
- summary: Build tool
6
+ version: 0.2.0
7
+ date: 2006-11-06 00:00:00 +01:00
8
+ summary: bee is a build tool
9
9
  require_paths:
10
10
  - lib
11
11
  email: michel.casabianca@gmail.com
@@ -25,46 +25,30 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement
25
25
  platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
- post_install_message: Enjoy!
28
+ post_install_message: Enjoy bee!
29
29
  authors:
30
30
  - Michel Casabianca
31
31
  files:
32
32
  - bin/bee
33
- - bin/beedoc
34
- - doc/html
35
- - doc/png
36
- - doc/yml
37
- - doc/html/documentation.html
38
- - doc/html/quickstart.html
39
- - doc/png/style.png
40
- - doc/yml/menu.yml
41
- - doc/yml/releases.yml
42
- - doc/yml/todo.yml
43
33
  - lib/bee.rb
44
- - lib/beedoc.rb
45
- - test/tc_bee_consoleformatter.rb
34
+ - lib/bee_console.rb
35
+ - lib/bee_default_context.rb
36
+ - test/tc_bee_console_formatter.rb
46
37
  - test/ts_bee.rb
47
38
  - README
39
+ - LICENSE
48
40
  test_files:
49
41
  - test/ts_bee.rb
50
42
  rdoc_options: []
51
43
 
52
44
  extra_rdoc_files:
53
45
  - README
46
+ - LICENSE
54
47
  executables:
55
48
  - bee
56
- - beedoc
57
49
  extensions: []
58
50
 
59
51
  requirements: []
60
52
 
61
- dependencies:
62
- - !ruby/object:Gem::Dependency
63
- name: rubyzip
64
- version_requirement:
65
- version_requirements: !ruby/object:Gem::Version::Requirement
66
- requirements:
67
- - - ">"
68
- - !ruby/object:Gem::Version
69
- version: 0.0.0
70
- version:
53
+ dependencies: []
54
+
data/bin/beedoc DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
- require 'beedoc'
5
-
6
- Bee::Doc.start_command_line
@@ -1,444 +0,0 @@
1
- <!--
2
- Copyright 2006 Michel Casabianca <casa@sweetohm.net>
3
-
4
- Licensed under the Apache License, Version 2.0 (the "License");
5
- you may not use this file except in compliance with the License.
6
- You may obtain a copy of the License at
7
-
8
- http://www.apache.org/licenses/LICENSE-2.0
9
-
10
- Unless required by applicable law or agreed to in writing, software
11
- distributed under the License is distributed on an "AS IS" BASIS,
12
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- See the License for the specific language governing permissions and
14
- limitations under the License.
15
- -->
16
-
17
- <p>Bee is a build tool parsing YAML build files. These files can embed
18
- shell and/or Ruby scripts. It is as fast as Make and its build files are
19
- far more readable than Ant ones (without the bloated XML syntax ;o).</p>
20
-
21
- <h2>Installation</h2>
22
-
23
- <p>Bee is a Ruby script, thus an interpreter must be installed on your
24
- machine. You can get one for free at
25
- <a href="http://www.ruby-lang.org">http://www.ruby-lang.org</a>.</p>
26
-
27
- <p>If <a href="http://docs.rubygems.org/">RubyGems</a> is installed on
28
- your machine, type <code>gem install bee</code> (you might need to have
29
- administrator privileges to do so).</p>
30
-
31
- <p>If you are reluctant to install RubyGems (which is not a good idea),
32
- you can still install bee the old fashion way: unzip installation
33
- archive somewhere and put its <i>bin</i> directory in your PATH.</p>
34
-
35
- <p>You can test your installation typing <code>bee -h</code>.</p>
36
-
37
- <h2>Usage</h2>
38
-
39
- <p>Type <code>bee</code> in directory of your build file (which name
40
- defaults to <i>build.yml</i>). To get help about usage, type
41
- <code>bee -h</code>:</p>
42
-
43
- <pre class="code"><code>$ bee -h
44
- Usage: bee [options] [targets]
45
- -h Print help about usage and exit.
46
- -b Print help about build and exit.
47
- -t Write template build file on disk.
48
- -v Enable verbose mode.
49
- -s style Define style for output (see documentation).
50
- -f file Build file to run (defaults to "build.yml").
51
- targets Targets to run (default target if omitted).</code></pre>
52
-
53
- <p>You can get help about loaded build file (using <code>-f</code>
54
- option if necessary) typing <code>bee -b</code>:</p>
55
-
56
- <pre class="code"><code>$ bee -b
57
- - Build: "bee"
58
- Description:
59
- This build file needs zip command line tool to generate distribution
60
- archive.
61
- - Properties:
62
- - api: "/Users/casa/Desktop/bee/build/api"
63
- - archive: "bee-beta-1.zip"
64
- - base: "/Users/casa/Desktop/bee"
65
- - build: "/Users/casa/Desktop/bee/build"
66
- - dist: "/Users/casa/Desktop/bee/build/bee"
67
- - doc: "/Users/casa/Desktop/bee/build/doc"
68
- - files: "README bin"
69
- - name: "bee"
70
- - src: "/Users/casa/Desktop/bee/bin/*"
71
- - syntax_report: "/Users/casa/Desktop/bee/build/syntax.txt"
72
- - test: "/Users/casa/Desktop/bee/test"
73
- - test_report: "/Users/casa/Desktop/bee/build/tests.txt"
74
- - version: "beta-1"
75
- - Targets:
76
- - all: Generate all
77
- - api: Generate API documentation
78
- - clean: Clean generated files
79
- - dist: Generate distribution archive
80
- - doc: Generate documentation
81
- - syntax: Check syntax of ruby files
82
- - syntax-report: Check syntax of ruby files and generate report
83
- - test: Run unit tests
84
- - test-report: Run unit tests and gerenate report
85
- - Default: all</code></pre>
86
-
87
- <p>This will print help about:</p>
88
-
89
- <ul>
90
- <li>Build file.</li>
91
- <li>Defined properties.</li>
92
- <li>Build targets.</li>
93
- <li>Default target.</li>
94
- </ul>
95
-
96
- <p>The <code>-t</code> option writes a template build file. This is
97
- convenient to quickly write a new build file editing this example.
98
- You can use option <code>-t file</code> to write template to another
99
- location than <i>build.yml</i> in current directory. Note that bee
100
- will refuse to overwrite an existing build file with a template.</p>
101
-
102
- <p>The <code>-v</code> option enables verbose mode (printing loaded
103
- build file, executed scripts and build time). Option <code>-s style</code>
104
- defines a style for output (see above section <i>Defining styles</i>
105
- for more information). The <code>-f file</code> enables you to load
106
- an alternate build file. Without this option, bee will look for
107
- a file named <i>build.yml</i> in current directory.</p>
108
-
109
- <h2>Configuration</h2>
110
-
111
- <p>bee doesn't load configuration file st startup, but you can set
112
- command line options in environment variable <code>BEEOPT</code> that
113
- is appended on command line at startup. For instance, setting:</p>
114
-
115
- <pre class="code">BEEOPT="-v"<code></code></pre>
116
-
117
- <p>Would always run bee in verbose mode.</p>
118
-
119
- <h2>Project files</h2>
120
-
121
- <p>Here is a sample project file (simplified version to generate bee
122
- distribution archive):</p>
123
-
124
- <pre class="code"><code># Build info
125
- - build: bee
126
- default: all
127
- description: |
128
- This build file needs zip command line tool to generate distribution
129
- archive.
130
-
131
- # Build properties
132
- - properties:
133
- - name: bee
134
- - version: "beta-1"
135
- - test: "test"
136
- - build: "#{base}/build"
137
- - dist: "#{build}/#{name}"
138
- - files: "README bin"
139
- - archive: "#{name}-#{version}.zip"
140
-
141
- # Build targets
142
- - target: test
143
- description: Run unit tests
144
- script:
145
- - "testrb #{test}"
146
-
147
- - target: dist
148
- description: Generate distribution archive
149
- depends: test
150
- script: |
151
- if [ ! -d #{build} ]
152
- then
153
- mkdir #{build}
154
- fi
155
- if [ ! -d #{dist} ]
156
- then
157
- mkdir #{dist}
158
- fi
159
- cp -r #{files} #{dist}
160
- rm -rf `find #{dist} -name "CVS"`
161
- rm -rf `find #{dist} -name ".??*"`
162
- cd #{build}
163
- zip -r #{archive} #{name}
164
-
165
- - target: clean
166
- description: Clean generated files
167
- script: |
168
- rm -rf #{build}
169
- rm -f `find #{base} -name "*~"`
170
- rm -f `find #{base} -name ".DS_Store"`
171
-
172
- - target: all
173
- description: Generate all
174
- depends: [clean, dist]</code></pre>
175
-
176
- <p>This is a <a href="http://www.yaml.org/">YAML</a> file. In such
177
- files, list elements are lines starting with a dash (<i>-</i>
178
- character) and hash entries are lines made of a key / value pair
179
- separated with a colon (<i>:</i> character). Thus, you might already
180
- have noticed that this file is a list of hash which can be:</p>
181
-
182
- <h3>Project information</h3>
183
-
184
- <p>This is a piece of information that is not mandatory but used
185
- while displaying build help. This looks like:</p>
186
-
187
- <pre class="code"><code>- build: bee
188
- default: all
189
- description: |
190
- This build file needs zip command line tool to generate distribution
191
- archive.</code></pre>
192
-
193
- <p>This hash may have following keys:</p>
194
-
195
- <ul>
196
- <li><b>build</b>: for the build name (mandatory).</li>
197
- <li><b>default</b>: to indicate default target to run (optional). If no
198
- default target is set, bee will set default as first target declared in
199
- the build file.</li>
200
- <li><b>description</b>: build description (optional). This is the place
201
- to list dependencies for the build (such as <code>zip</code> in this
202
- example).</li>
203
- <li><b>context</b>: this is a list of scripts to load at startup in
204
- the build context. These scripts can define variables and functons
205
- used in embedded scripts. See section <i>Build Context</i> above for
206
- more information.</li>
207
- </ul>
208
-
209
- <h3>Build properties</h3>
210
-
211
- <p>These are properties used by build file scripts or other properties.
212
- They can be seen as build file variable declarations:</p>
213
-
214
- <pre class="code"><code>- properties:
215
- - name: bee
216
- - version: "beta-1"
217
- - test: "test"
218
- - build: "#{base}/build"
219
- - dist: "#{build}/#{name}"
220
- - files: "README bin"
221
- - archive: "#{name}-#{version}.zip"</code></pre>
222
-
223
- <p>This entry has a single key <i>properties</i> that contains a list
224
- of property definitions. Each definition is a Hash with a single key
225
- which is the property name associated to its value. Properties can
226
- reference each other using a Ruby syntax <code>#{property}</code>.</p>
227
-
228
- <h3>Targets</h3>
229
-
230
- <p>A target can be seen as build file functions. A target is defined
231
- to implement a given goal. For instance, in sample hereafter, target
232
- named <i>dist</i> generates distribution archive:</p>
233
-
234
- <pre class="code">- target: dist
235
- description: Generate distribution archive
236
- depends: test
237
- script: |
238
- if [ ! -d #{build} ]
239
- then
240
- mkdir #{build}
241
- fi
242
- if [ ! -d #{dist} ]
243
- then
244
- mkdir #{dist}
245
- fi
246
- cp -r #{files} #{dist}
247
- rm -rf `find #{dist} -name "CVS"`
248
- rm -rf `find #{dist} -name ".??*"`
249
- cd #{build}
250
- zip -r #{archive} #{name}<code></code></pre>
251
-
252
- <p>A target entry might have following keys:</p>
253
-
254
- <ul>
255
- <li><b>target</b>: the target name (mandatory).</li>
256
- <li><b>description</b>: description printed in build help (optional).</li>
257
- <li><b>depends</b>: a list of target's dependencies (optional). This
258
- might be a list or a single string. Dependencies are executed before a
259
- given target.</li>
260
- <li><b>script</b>: script to run to achive this target (optinal). This is
261
- a single script or a list of scripts to run. Each script might be a
262
- shell script or a Ruby script (when prefixed with <code>- rb:</code>).</li>
263
- </ul>
264
-
265
- <p>bee writes executed scripts in verbose mode. For instance, running
266
- sample script would print on console:</p>
267
-
268
- <pre class="code"><code>$ bee
269
- ----------------------------------------------------------------------- clean --
270
- ------------------------------------------------------------------------ test --
271
- Loaded suite test
272
- Started
273
- ..
274
- Finished in 0.003776 seconds.
275
-
276
- 2 tests, 2 assertions, 0 failures, 0 errors
277
- ------------------------------------------------------------------------ dist --
278
- adding: bee/ (stored 0%)
279
- adding: bee/bin/ (stored 0%)
280
- adding: bee/bin/bee (deflated 73%)
281
- adding: bee/bin/beedoc (deflated 69%)
282
- adding: bee/README (deflated 30%)
283
- ------------------------------------------------------------------------- all --
284
- OK</code></pre>
285
-
286
- <p>While running in verbose mode, it would output:</p>
287
-
288
- <pre class="code">$ bee -v
289
- Starting build 'build.yml'...
290
- ----------------------------------------------------------------------- clean --
291
- - rm -rf #{build}
292
- . rm -f `find #{base} -name "*~"`
293
- . rm -f `find #{base} -name ".DS_Store"`
294
- ------------------------------------------------------------------------ test --
295
- - testrb #{test}
296
- Loaded suite test
297
- Started
298
- ..
299
- Finished in 0.003944 seconds.
300
-
301
- 2 tests, 2 assertions, 0 failures, 0 errors
302
- ------------------------------------------------------------------------ dist --
303
- - if [ ! -d #{build} ]
304
- . then
305
- . mkdir #{build}
306
- . fi
307
- . if [ ! -d #{dist} ]
308
- . then
309
- . mkdir #{dist}
310
- . fi
311
- . cp -r #{files} #{dist}
312
- . rm -rf `find #{dist} -name "CVS"`
313
- . rm -rf `find #{dist} -name ".??*"`
314
- . cd #{build}
315
- . zip -r #{archive} #{name}
316
- adding: bee/ (stored 0%)
317
- adding: bee/bin/ (stored 0%)
318
- adding: bee/bin/bee (deflated 73%)
319
- adding: bee/bin/beedoc (deflated 69%)
320
- adding: bee/README (deflated 30%)
321
- ------------------------------------------------------------------------- all --
322
- Built in 0.567582 s
323
- OK<code></code></pre>
324
-
325
- <p>First line of a script starts with a dash (<i>-</i> character) while
326
- following ones start with a dot (<i>.</i> character). In verbose mode,
327
- bee also prints loaded build file and build time.</p>
328
-
329
- <h2>Build Context</h2>
330
-
331
- <p>Setting <code>context</code> key in build info entry load a given
332
- Ruby script in the build context. This context is the place where
333
- embedded Ruby scripts run (this is similar to the workspace where you
334
- run code you type in IRB). This is a simple way to load a library you
335
- will call in your Ruby scripts. Let's say you would like to call function
336
- <code>say_hello</code> defined in script named <i>hello.rb</i>:</p>
337
-
338
- <pre class="code"><code>def say_hello(who)
339
- puts "Hello #{who}!"
340
- end</code></pre>
341
-
342
- <p>You would load it in context with following build file: </p>
343
-
344
- <pre class="code"><code>- build: hello
345
- context: hello.rb
346
-
347
- - properties:
348
- - world: "World"
349
-
350
- - target: hello
351
- script:
352
- - rb: "say_hello(world)"</code></pre>
353
-
354
- <p>The contex path is relative to the build file. Furthermore, you can
355
- load more than one file in your context, using a list:</p>
356
-
357
- <pre class="code"><code>- build: hello
358
- context: [foo.rb, bar.rb]</code></pre>
359
-
360
- <h2>Defining Style</h2>
361
-
362
- <p>You can define a style using the <code>-s syle</code> option. This
363
- is a way to colorize output on console using ANSI colors for Unix
364
- terminals. For instance, on a Unix box, running bee with option
365
- <code>-s lc:,tf:yellow,ts:underscore,ss:bright,sf:green,es:bright,ef:red,kf:blue</code>
366
- would output:</p>
367
-
368
- <center><img src="style.png"></center>
369
-
370
- <p>Styles are defined as coma separated key/value pairs. Keys are the
371
- following:</p>
372
-
373
- <table>
374
- <tr>
375
- <th>Key</th>
376
- <th>Description</th>
377
- </tr>
378
- <tr>
379
- <td><b>lc</b></td>
380
- <td>Character for target title (defaults to dash <i>-</i>). To set space,
381
- set to an empty value, such as: <code>...,lc:,...</code> as there should
382
- not be spaces in style option (this would break command line parsing).</td>
383
- </tr>
384
- <tr>
385
- <td><b>ll</b></td>
386
- <td>Line length. If not set, will try to determine it calling IOCTL
387
- function. If this call fails, will set line length to <i>80</i>
388
- characters.</td>
389
- </tr>
390
- <tr>
391
- <td><b>ts</b></td>
392
- <td>Target style.</td>
393
- </tr>
394
- <tr>
395
- <td><b>tf</b></td>
396
- <td>Target foreground.</td>
397
- </tr>
398
- <tr>
399
- <td><b>tb</b></td>
400
- <td>Target background.</td>
401
- </tr>
402
- <tr>
403
- <td><b>ks</b></td>
404
- <td>Task style.</td>
405
- </tr>
406
- <tr>
407
- <td><b>kf</b></td>
408
- <td>Task foreground.</td>
409
- </tr>
410
- <tr>
411
- <td><b>kb</b></td>
412
- <td>Task background.</td>
413
- </tr>
414
- <tr>
415
- <td><b>ss</b></td>
416
- <td>Success style.</td>
417
- </tr>
418
- <tr>
419
- <td><b>sf</b></td>
420
- <td>Success foreground.</td>
421
- </tr>
422
- <tr>
423
- <td><b>sb</b></td>
424
- <td>Success background.</td>
425
- </tr>
426
- <tr>
427
- <td><b>es</b></td>
428
- <td>Error style.</td>
429
- </tr>
430
- <tr>
431
- <td><b>ef</b></td>
432
- <td>Error foreground.</td>
433
- </tr>
434
- <tr>
435
- <td><b>eb</b></td>
436
- <td>Error background.</td>
437
- </tr>
438
- </table>
439
-
440
- <p>If a given key is not set, it will keep its default value. The bee
441
- options environment variable <code>BEEOPT</code> is the best place
442
- to set you style settings.</p>
443
-
444
- <p>Enjoy!</p>