Category:Guish: Difference between revisions

no edit summary
No edit summary
No edit summary
 
(12 intermediate revisions by the same user not shown)
Line 13:
 
 
'''guish''' ['''-c''' <code>]['''-s''']['''-q''']['''-k''']['''-t''']['''-f''']['''-v''']['''-b''']['''-h'''][<file>][<arguments>]
 
= DESCRIPTION =
Line 41:
; '''-v'''
: show version.
; '''-b'''
: show build (compiled in) options.
; '''-h'''
: guess.
Line 81 ⟶ 83:
In this example, "|b|" is an expression which creates an element of type button, and returns its X11 window id (ex, "65011718").
 
The '''+''' command will then show the button (all elements are hidden by default unless '''-zs''' option is given).
 
== Subject and implied subject ==
Line 120 ⟶ 122:
 
<pre> |b|&lt;generator =&gt;c{|b|&lt;clone}</pre>
A button which is a factory of buttons (run this with '''-zs''' option).
 
Here the evaluation of the code block is done when the click signal is triggered.
Line 159 ⟶ 161:
There are single and double quoting: anything embedded inside single quotes '', is treated literally (no escaping takes place) and as a single token.
 
Variable interpolationand function interpolations (respectively via &quot;'''@{...}'''&quot; and &quot;'''@(...)'''&quot;) isare used inside double quotes &quot;&quot;, external command substitution quotes `` and external window id substitution '''&lt;( ...)'''.
 
Escaping (&quot;\n\t\r\f\v\b&quot;) takes place only inside double quotes &quot;&quot;.
 
<pre> a = 'my string'; puts &quot;this is: @{a}&quot;</pre>
puts &quot;sum of 1 + 5 is: @(add(1, 5))&quot;</pre>
Anything embedded inside '''{}''' is treated as a code block and no variable substitution is done at definition time.
 
To &quot;execute&quot; a block, simply use parens '''()'''. If arguments are given, they can be referenced inside block by using '''@n''', where &quot;n&quot; is a number which represents a specific argument by position, with (indexes startstarting at 1 (works with command line parameters too). To refer to all arguments (at once) given to the block use '''@*''' operator (when in string interpolation, argument separator is a space).
 
<pre> v = myvar
Line 174 ⟶ 177:
 
<pre> {
puts join(&quot;&quot;, &quot;string length is: &quot;, len(@1))
}(&quot;home&quot;)</pre>
Here instead, the block is defined and executed immediately, using &quot;home&quot; as the first argument.
Line 188 ⟶ 191:
<pre> fn = {return 1 2 3}
puts join(fn())</pre>
== Joining ==
 
 
 
By using the special '''++''' operator, it's possible to join tokens and blocks; it works simirarly to the '''join''' function, except that the second operand it's treated always as a token (even if it is a '{').
 
<pre> puts a ++ b</pre>
== Conditionals ==
 
Line 213 ⟶ 209:
<pre> a = 1
after 4 {a = 0}
while {eq(@a, 1)} {
wait 1 puts 'true'
}
Line 219 ⟶ 215:
And here another one using '''each''' function:
 
<pre> each({puts @1}, 1, 2, 3, 4, 5})</pre>
And another one of a '''for''' loop:
 
<pre> for x in 1 2 3 4: { puts @x }</pre>
== Tail recursion optimization (TCO) ==
 
Line 265 ⟶ 261:
 
 
Anything inside '''[]''' is trated as a slice expression. The usage is '''[&lt;n&gt;[,&lt;x&gt;]]''', when &lt;n&gt; is an index, and &lt;x&gt; is an optional end index (always inclusive); if the preceding argument is a regular token, then the expression will return its characters as specified by index(es), otherwise if it's a block, the expression will return its tokens:
 
<pre> puts {1, 2, 3, 4, {a, b}, cat}[4][1]</pre>
Line 286 ⟶ 282:
; '''self'''
: variable holding the window id when in signal code.
; '''args'''
: refers to the block in which there are positional arguments and function arguments (alternative syntax).
; '''FILE'''
: variable holding the path of current source file.
Line 314 ⟶ 312:
; '''c'''
: A checkbox.
; '''t'''
: A label with a totally transparent background (requires a compositor).
 
= SPECIAL COMMANDS =
Line 323:
; '''=&gt; &lt;signal&gt; &lt;subcmd&gt;'''
: register a sub-command &lt;subcmd&gt; to run when &lt;signal&gt; triggers. For normal signals (eg. signals tied to elements), there must exist an implied subject.
; '''global &lt;var!&gt; = &lt;valsignal&gt;'''
: unregister a sub-command &lt;subcmd&gt; previously registered on signal &lt;signal&gt;.
: defines a variable using the same rules of variable definition, but defining that variable in the global scope; this usually can be used inside functions to define a global variable which doesn't exist already.
; '''q'''
: quit guish (exit status 0).
; '''exit &lt;status&gt;'''
: quit guish (exit status &lt;status&gt;).
; '''cd &lt;path&gt;'''
: change current working directory using &lt;path&gt;.
; '''run &lt;cmd&gt;'''
: execute shell command &lt;cmd&gt;.
; '''dumpputs [&lt;args...&gt;]'''
: printprints &lt;args&gt;remaining phrase to stdout with a newline added.
; '''putsp [&lt;arg...&gt;]'''
: printprints &lt;arg&gt;remaining phrase to stdout with a newline added.
; '''pe [&lt;arg...&gt;]'''
: printprints &lt;arg&gt;remaining phrase to stdoutstderr.
; '''eunset &lt;argname|num|wid&gt; [&lt;attr&gt;]'''
: unsets a variable (&lt;name&gt;) or timed scheduled procedure registered with &lt;num&gt;, see '''every''' command. If, instead of &lt;name|num&gt;, an element id &lt;wid&gt; is given and a name attribute &lt;attr&gt; is given, deletes that element attribute.
: print &lt;arg&gt; to stderr.
; '''unset &lt;namescheduled num&gt;'''
: unset variable or timed scheduled procedure registered with &lt;num&gt;, see '''every''' command.
; '''source &lt;file&gt;'''
: execute commands from file.
; '''vars [&lt;wid&gt;]'''
: shows all variables present in the current scope or, if &lt;wid&gt; element id is given, shows all element attributes (uses stderr).
: display all variables on standard error.
; '''ls'''
: display all existing widgets on standard error(stderr).
; '''del &lt;wid&gt;'''
: delete a widget with id &lt;wid&gt;.
Line 354:
: schedule &lt;block&gt; to run once after &lt;seconds&gt; seconds are elapsed.
; '''wait &lt;seconds&gt;'''
: stop command execution and wait &lt;seconds&gt; seconds before resuming; (accepts decimal values too). XEvent handling, schedules actions and signal execution are unaffected by this option.
; '''if &lt;condition&gt; &lt;block&gt;'''
: executes &lt;block&gt; if condition evaluates to true (see Conditionals).
Line 367:
; '''until &lt;condition&gt; &lt;block&gt;'''
: executes &lt;block&gt; until &lt;condition&gt; evaluates to true (see Conditionals).
; '''for [&lt;variablevar1&gt;, &lt;listvar2&gt;, of...] itemsin [&lt;val1&gt;, &lt;val2&gt;, ...] : &lt;codeblock&gt;'''
: executes the block &lt;codeblock&gt; for each item in listgroup of items using a variable. Note that &lt;code&gt; must be a code blockvariables.
; '''break'''
: exit from current loop.
Line 375:
; '''pass [&lt;args&gt;]'''
: do nothing, consuming remaining arguments.
; '''send &lt;wid&gt; &lt;keysequence&gt;'''
: send a keysequence to an element whose id si &lt;wid&gt; (must be enabled at compilation time).
; '''ctrl &lt;wid&gt; &lt;keysequence&gt;'''
: send control key sequence to an element whose id si &lt;wid&gt; (must be enabled at compilation time).
 
= GENERIC COMMANDS =
Line 440:
; ''': &lt;title&gt;'''
: set element title.
; '''a &lt;data&gt;'''
: attach custom &lt;data&gt; to a widget; to retrieve it see &quot;BUILTIN FUNCTIONS&quot; section.
; '''s &lt;text&gt;'''
: set element style (see STYLE AND ATTRIBUTES section).
Line 448 ⟶ 446:
; '''m &lt;x&gt; &lt;y&gt;'''
: move element to coords &lt;x&gt; &lt;y&gt;.
; '''/ [&lt;l|L|a|A|p|x|n&gt; [&lt;...&gt;]]'''
: draws/fills lines, points and arcs depending on operation (See Drawing operations subsection). Origin coordinates correspond to the bottom-left corner as default Cartesian axes (instead of upper-left one used for windows/elements). If no operation is given, then all drawings are discarded from the implied element.
; '''A &lt;element&gt; &lt;alignment&gt;'''
: moves implied element to &lt;element&gt; using &lt;alignment&gt; (see alignment in STYLE AND ATTRIBUTES section, as &lt;alignment&gt; opts are similar).
Line 462:
; '''Y'''
: enable/disable (toggle) moving an element inside its parent by click-and-drag on y axis Enabling this will automatically exclude the flag to click-and-drag and move parent.
 
== Drawing operations ==
 
 
 
; '''l [&lt;color&gt; &lt;x1&gt; &lt;y1&gt; &lt;x2&gt; &lt;y2&gt; [&lt;...&gt;]]'''
: draws lines between given points using color &lt;color&gt; (beware this command consumes all the phrase). If no arguments are given, then all element lines are discarded.
; '''L [&lt;color&gt; &lt;x1&gt; &lt;y1&gt; &lt;x2&gt; &lt;y2&gt; [&lt;...&gt;]]'''
: fills the polygon described by given points using color &lt;color&gt; (beware this command consumes all the phrase). If no arguments are given, then all filled polygons are discarded.
; '''a [&lt;color&gt; &lt;x&gt; &lt;y&gt; &lt;w&gt; &lt;h&gt; &lt;alpha&gt; &lt;beta&gt; [&lt;...&gt;]]'''
: draws an arc using color &lt;color&gt; and whose &quot;center&quot; is at &lt;x&gt; &lt;y&gt;, major and minor axes are respectively &lt;w&gt; and &lt;h&gt;, start and stop angles are &lt;alpha&gt; and &lt;beta&gt; (consumes all the phrase). If no arguments are given, then all element arcs are discarded.
; '''A [&lt;color&gt; &lt;x&gt; &lt;y&gt; &lt;w&gt; &lt;h&gt; &lt;alpha&gt; &lt;beta&gt; [&lt;...&gt;]]'''
: fills an arc using color &lt;color&gt; and whose &quot;center&quot; is at &lt;x&gt; &lt;y&gt;, major and minor axes are respectively &lt;w&gt; and &lt;h&gt;, start and stop angles are &lt;alpha&gt; and &lt;beta&gt; (consumes all the phrase). If no arguments are given, then all element arcs are discarded.
; '''p [&lt;color&gt; [&lt;...&gt;]]'''
: draws given points using color &lt;color&gt; (beware this command consumes all the phrase). If no arguments are given, then all points are discarded.
; '''x [&lt;color&gt; [&lt;...&gt;]]'''
: draws given pixels using color &lt;color&gt; (beware this command consumes all the phrase). If no arguments are given, then all pixels are discarded.
; '''n [&lt;color&gt; &lt;name&gt; &lt;x&gt; &lt;y&gt;]'''
: draws given point using color &lt;color&gt; and putting the text &lt;name&gt; at that point. If no arguments are given, then all points are discarded.
 
= NORMAL COMMANDS =
Line 615 ⟶ 634:
Every phrase is reduced to an empty phrase while evaluating:
 
<pre> a = 234 ;{i1=|i|;&lt;'input1'+}(); {i2=|i|;&lt;'input2'+}() |b|&lt;btn+</pre>
This example is composed by 2 phrases, and the code block in each phrase is executed before each assignment.
 
Line 634 ⟶ 653:
 
<pre> |b||b||b|+
dumpputs *</pre>
== Variable substitution ==
 
 
 
With the '''=''' operator (actually, it's a special statement command), it's possible to assign a valuevalues to a variable, reusing it later by simply referencing it using '''@''' operator when not inside quotes or by wrapping it inside '''@{}''' when in double quotes, shell command substitution quotes '''``''', or external window id substitution '''&lt;( )'''.
 
<pre> b = 123; puts @a</pre>
There are two methods to define/create empty variables: by explicitely assing an empty string to a variable (ex. a = &quot;&quot;) or by simply omit the value (ex. a =).
 
In addition, if there is more than one value to assign, a block is automatically created (embedding those values) and assigned to that variable:
 
<pre> a = 1 # this simply assigns '1' to the variable 'a'
b = 1, 2, 3, 4 # this instead assigns the block '{1, 2, 3, 4}' to the variable 'a'
c = {1, 2, 3, 4} # same but explicit</pre>
Each block has it's own scope, and variable resolution works by searching from the last scope to the first. Ex:
 
Line 664 ⟶ 689:
name = 'random name'
puts &quot;@{gname} is maybe @{name}&quot;</pre>
== Element substitutionexpressions ==
 
 
 
Anything inside '''||''' is an element expression; a widget of a given element is created and its X11 window id substituted. The synopsis is: |&lt;element&gt;[{&lt;width&gt;, &lt;height&gt;}]| Ex.
 
<pre> |b|+</pre>
Line 695 ⟶ 720:
xterm program is spawn, and can be driven (almost) like a normal element.
 
= OPERATORS =
= BUILTIN FUNCTIONS =
 
 
 
== Binary ==
== Widget's related functions ==
 
 
 
; '''&lt;s&gt; .. &lt;e&gt;'''
First argument &lt;eid&gt; must be an element id.
: returns integers starting at &lt;s&gt; and ending at &lt;e&gt; (inclusive) as multiple tokens.
; '''&lt;var&gt; = [&lt;val&gt;, [&lt;val1&gt;, ...]]'''
: defines a variable (consumes all the phrase). If no value is given, an empty token is assigned to the variable. If a single value is given, that value is assigned to the variable. If multiple values are given, then all these values are wrapped inside a block, and this block is assigned to the variable.
; '''&lt;attr&gt; .= [&lt;val&gt;, [&lt;val1&gt;, ...]]'''
: defines an element using the implied subject attribute (consumes all the phrase). If no value is given, an empty token is assigned to the variable. If a single value is given, that value is assigned to the variable. If multiple values are given, then all these values are wrapped inside a block, and this block is assigned to the variable.
 
== Unary ==
; '''t(&lt;eid&gt;)'''
 
 
 
; '''@&lt;varname|num&gt;'''
: dereferences a variable name (or positional argument).
; '''@*'''
: returns all function parameters as tokens (usable with command line parameters too).
; '''[&lt;eid&gt;].&lt;attr&gt;'''
: dereferences an element attribute; if &lt;eid&gt; is given, uses that element, otherwise uses implied subject.
 
= ELEMENT ATTRIBUTES =
 
 
 
Every element can have some default readonly attributes and a variable number of custom attributes (which can be set by using assignment only, not by using '''let''' function). To set an attribute, use the &quot;'''.='''&quot; operator; to get it instead use the &quot;'''.'''&quot; operator.
 
<pre> b = |b|; myattr .= 'here'; puts(@b.myattr)</pre>
In the last example, a custom attribute, &quot;myattr&quot; is created and used.
 
The following are default attributes (readonly):
 
; '''t'''
: widget's type.
; '''w(&lt;eid&gt;)'''
: widget's width.
; '''h(&lt;eid&gt;)'''
: widget's height.
; '''x(&lt;eid&gt;)'''
: widget's x coord.
; '''y(&lt;eid&gt;)'''
: widget's y coord.
; '''b(&lt;eid&gt;)'''
: widget's border width.
; '''g(&lt;eid&gt;)'''
: widget's margin width.
; '''d(&lt;eid&gt;)'''
: widget's text data.
; '''a(&lt;eid&gt;)T'''
: widget's custom/attached data.
; '''T(&lt;eid&gt;)'''
: widget's title.
; '''c(&lt;eid&gt;)'''
: widget's checked/unchecked status (only for checkbox).
; '''n(&lt;eid&gt;)'''
: widget's number of subwidgets (only for page).
; '''s(&lt;eid&gt;)'''
: widget's subwidgets ids (one token each, only for page).
; '''pid(&lt;eid&gt;)'''
: process ID associated with the widget.
; '''v(&lt;eid&gt;)'''
: widget is visible.
; '''e(&lt;eid&gt;)'''
: widget is enabled (freezed/unfreezed).
; '''f(&lt;eid&gt;)'''
: widget is focused.
; '''exists(&lt;eid&gt;)'''
: widget exists.
 
== GenericBUILTIN functionsFUNCTIONS ==
 
 
Line 748 ⟶ 796:
Symbol &quot;'''...'''&quot; means a variable number of arguments.
 
; '''exists(&lt;eid&gt;)'''
: returns 1 if a widget with id &lt;eid&gt; exists, 0 otherwise.
; '''read([&lt;file&gt;])'''
: reads and returns a line (excluding newline) from standard input; if an existing [file] is given, reads and returns all its content. Beware that this function blocks the GUI events, and returns nothing when reading from stdin and source is non-blocking.
; '''write(&lt;text&gt;, &lt;file&gt;)'''
: writes text into file and returns the number of characters written. Creates the file if it doesn't exist yet.
; '''append(&lt;text&gt;, &lt;file&gt;)'''
: append text to the end of file and returns the number of characters written. Creates the file if it doesn't exist yet.
; '''calleval(&lt;name&gt;, ...)'''
: getsevaluates acode variableby namefirst stringifying all given arguments and athen variablereturns numberthe result of arguments,evaluation thenif callsany. theBeware that this function whoseruns namein isthe &quot;namecurrent&quot; with those argumentsscope, and returnscan themodify result (if any)it.
; '''builtin(&lt;func&gt;, ...)'''
: gets the name of a builtin function and a variable number of arguments, then calls the builtin function with those arguments and returns the result (if any). It's useful when overriding builtin functions.
; '''each(&lt;function&gt;, ...)'''
: executes &lt;function&gt; for each additional argument given passing it as the first argument to the block. If return values are present, they will be accumulated and then returned.
; '''env(&lt;var&gt;)'''
: returns the value of the environment variable &quot;var&quot;.
; '''cwd()'''
: returns the value of the current working directory.
; '''rev([&lt;block&gt;], ...)'''
: if a block is given as first argument, its element will be returned in reverse, otherwise '''rev''' will return all its arguments in reverse. This function is somewhat special, as when there are no arguments to get, it'll return nothing (statement behaviour).
Line 766 ⟶ 820:
; '''if(&lt;cond&gt;, [&lt;v1&gt;, [&lt;v2&gt;]])'''
: if &lt;cond&gt; is true and &lt;v1&gt; is given, returns &lt;v1&gt;, else if &lt;cond&gt; is false and &lt;v2&gt; is given, returns &lt;v2&gt;.
; '''unless(&lt;cond&gt;, [&lt;v1&gt;, [&lt;v2&gt;]])'''
: if &lt;cond&gt; is false and &lt;v1&gt; is given, returns &lt;v1&gt;, else if &lt;cond&gt; is true and &lt;v2&gt; is given, returns &lt;v2&gt;.
; '''and(...)'''
: returns the first true argument; if there are no true arguments, returns the last one which is false. The function evaluates any block given.
; '''or(...)'''
: returns the last true argument if all arguments are true, otherwise returns the first false argument. The function evaluates any block given.
; '''flat(...)'''
: returns all given arguments; if a block is found, then it is flatted.
Line 775 ⟶ 835:
: prints given arguments to stdout. This function is somewhat special, it'll return nothing (statement behaviour).
; '''push(...)'''
: pushes given arguments to current function arguments (whenworks insidewith acommand functionline parameters too). This function is somewhat special, it'll return nothing (statement behaviour).
; '''pushb(...)'''
: pushes given arguments to current function arguments from the beginning (whenworks insidewith acommand functionline parameters too). This function is somewhat special, it'll return nothing (statement behaviour).
; '''pop()'''
: pops the last argument from function arguments (whenworks insidewith acommand functionline parameters too). This function is somewhat special, as if there are no arguments to pop, it'll return nothing (statement behaviour).
; '''popb()'''
: pops the first argument from function arguments (whenworks insidewith acommand functionline parameters too). This function is somewhat special, as if there are no arguments to pop.
; '''slice(&lt;si&gt;, &lt;ei&gt;, ...)'''
: returns arguments starting at &quot;si&quot; and ending at &quot;ei&quot; (inclusive). This function is somewhat special, as when there is nothing to get, it'll return nothing (statement behaviour).
; '''times(&lt;n&gt;, &lt;arg&gt;)'''
: returns a sequence of tokens made by &lt;n&gt; times &lt;arg&gt;. This function is somewhat special, as when there are 0 tokens to replicate, it'll return nothing (statement behaviour).
; '''get(&lt;name&gt;)'''
: returns the value of the variable with name &lt;name&gt;, or an empty token if the variable doesn'tdoes not exist.
; '''at(&lt;n&gt;, ...)'''
: returns the &quot;nth&quot; argument given (by index). This function is somewhat special, as when there is nothing to get, it'll return nothing (statement behaviour).
; '''true(&lt;arg&gt;)'''
: returns 1 if &lt;arg&gt; is true, 0 otherwise.
Line 798 ⟶ 854:
; '''join(...)'''
: joins blocks and/or tokens by applying the following rules to all arguments given, and accumulates the result as the first operand. If the operands are blocks, then a single new block is created by joining them; if the operands are tokens, then a single new token is created by joining them, and its type will be that of the &quot;second&quot; token; if the operands are mixed (eg. a block and a token), then the token will be embedded inside the block.
; '''range(&lt;start&gt;, &lt;end&gt;)'''
: returns integers starting at &lt;start&gt; and ending at &lt;end&gt; (inclusive) as multiple tokens.
; '''isdef(&lt;token&gt;)'''
: returns 1 if &lt;token&gt; is a variable, 0 otherwise.
Line 810 ⟶ 864:
; '''isint(...)'''
: returns 1 if just one argument is given and is an integer, 0 otherwise.
; '''len(&lt;tokenarg&gt;)'''
: if a block is given, returns the lengthnumber of its element, otherwise returns the number of characters of the token.
; '''split(&lt;token&gt;, &lt;sep&gt;)'''
: splits &quot;token&quot; using separator &quot;sep&quot; and returns resulting tokens having their type equal to that of &quot;token&quot;.
Line 818 ⟶ 872:
; '''seq(&lt;t1&gt;, &lt;t2&gt;, ...)'''
: returns 1 if all arguments are equal (string comparison), 0 otherwise.
; '''count(...)'''
: returns the number of given arguments.
; '''any(...)'''
: returns the first true argument; if there are no true arguments, returns the last one which is false. This function is special, as the evaluation will be interrupted as soon as there is at least 1 true argument.
; '''all(...)'''
: returns the last true argument if all arguments are true, otherwise returns the first false argument. This function is special, as the evaluation will be interrupted as soon as there is at least 1 false argument.
; '''add(...)'''
: perform addition.
Line 834 ⟶ 882:
; '''mod(...)'''
: perform modulus.
; '''rand()'''
: returns a random positive integer.
; '''sqrt(&lt;n&gt;)'''
: returns the square root of &lt;n&gt;.
; '''cbrt(&lt;n&gt;)'''
: returns the cube root of &lt;n&gt;.
; '''pow(&lt;n&gt;, &lt;e&gt;)'''
: returns the power of &lt;n&gt; raised to &lt;e&gt;.
; '''log(&lt;n&gt;)'''
: returns the base 10 logarithm of &lt;n&gt;.
; '''ln(&lt;n&gt;)'''
: returns the natural logarithm of &lt;n&gt;.
; '''sin(&lt;n&gt;)'''
: returns the sine of &lt;n&gt; (degrees).
; '''cos(&lt;n&gt;)'''
: returns the cosine of &lt;n&gt; (degrees).
; '''tan(&lt;n&gt;)'''
: returns the tangent of &lt;n&gt; (degrees).
; '''hex(&lt;n&gt;)'''
: returns &lt;n&gt; in its hexadecimal representation.
; '''int(&lt;n&gt;)'''
: returns integral part of given number &lt;n&gt;; rounds to nearest integer.
; '''xor(&lt;n1&gt;, &lt;n2&gt;, ...)'''
: perform bitwise XOR.
; '''andband(&lt;n1&gt;, &lt;n2&gt;, ...)'''
: perform bitwise AND.
; '''orbor(&lt;n1&gt;, &lt;n2&gt;, ...)'''
: perform bitwise OR.
; '''lsh(&lt;n1&gt;, &lt;n2&gt;, ...)'''
Line 874 ⟶ 944:
Each field must be separated by newlines, ''';''' or '''|'''. Colors can be specified by using a common shortname, such as &quot;yellow&quot;, or by using RGB value, such as &quot;#ff32ae&quot;.
 
; '''background | bg: &lt;color|/&lt;path to image&gt;&gt;'''
: set background color or a background image by specifying image path; if the string &quot;null&quot; is given as &lt;path to image&gt;, current image is removed. (Background image loading requires building guish with Imlib2 support.)
: set background color
; '''color | foreground | fg: &lt;color&gt;'''
: set foreground color
Line 888 ⟶ 958:
; '''border-color | bc: &lt;color&gt;'''
: set border color
; '''background-image | i: &lt;path&gt;'''
: set background image by specifying image path; if the string &quot;null&quot; is given, current image is removed. (This attribute requires building guish with Imlib2 support.)
; '''width | w: &lt;value in pixels&gt;'''
: set width
Line 896 ⟶ 964:
; '''border | b: &lt;value in pixels&gt;'''
: set border width
; '''line | l: &lt;value in pixels&gt;'''
: set line width (use with &quot;/&quot; command)
; '''margin | g: &lt;value in pixels&gt;'''
: set margin width
39

edits