Choose one: (1) Install Package, (2) No-Install Package (each about 1 MB).
Code: Select all
v7.60.0037 - 2008-09-30 15:30
! DropDown: Error on closing app if no items in Name / Location MRU
list. Fixed.
Code: Select all
v7.60.0037 - 2008-09-30 15:30
! DropDown: Error on closing app if no items in Name / Location MRU
list. Fixed.
Code: Select all
v7.60.0036 - 2008-09-30 12:15
+ DropDown: Now implemented on Find Files Name & Location tab.
+ DropDown: Icon in Edit box now honours ScriptSmartDetect. Actually
the ScriptSmartDetect tweak is now honoured everywhere where quick
scripting works.
So you can e.g. add a Catalog entry with "location":
echo "smart script";
If ScriptSmartDetect=1 then you will see the correct script icon
and the script will run on a single click.
+ DropDown: Some special service keys now also work with the Edit
box of the new DropDown:
Ctrl+A: Select All.
F2: If all is selected: unselect all, move caret to end
of text. Else: select all.
! DropDown: List did not wheel. Fixed.
! DropDown: Fixed a couple of other glitches.
! Homezoned tabs were overwritten by permanent startup path. Fixed.
! Scripting: Did not work as expected:
msg <date dd-mm-yyyy>; //30-09-2008
Fixed.
! Scripting: Did not work as expected:
msg (1 == 1) ? ('$a is a variable') : 'uh?'; //$a is a variable
Fixed.
* Menu Go: Made some captions a bit more consistent and hopefully
newbie-friendlier by means of redundancy:
OLD:
"Go to Application Path"
"Go to Application Data"
"Go to Script Files"
NEW:
"Go to Application Folder"
"Go to Application Data Folder"
"Go to Scripts Folder"
Code: Select all
v7.60.0034 - 2008-09-28 08:39
! Some lists crashed on opening the Rename box. Fixed.
! DropDown: List does not wheel. Not fixed yet...
Code: Select all
v7.60.0032 - 2008-09-27 20:26
+++ New DropDown Control.
- supports Unicode
- supports Auto-Complete path/file names
- supports Auto-Complete recently used items
- supports TABbing through the items
- F4, Up, Down: all open the list; F4 closes again;
next Up or Down select list items; selection wraps around ends
- shows icons for edit box and list items (where applicable)
- list supports mouse wheel
- edit box ignores mouse wheel (that's good!)
- is not a so-called UserControl (that's very good!) and not made
of MS parts but fully hand-made, and hence incredibly powerful
and enhanceable, extremely fast and low in memory consumption
Test the new control e.g. in the Go To dialog (Ctrl+G). Later it
will be added to various places of the app. and will eventually
replace the current Address Bar.
+ Configuration: Added option "Auto-optimize tree". Check to
automatically collapse non-current nodes in Tree. Rule: Auto-
optimize sets in when you expand the current tree node.
! SC setkey: Now supports creating UNICODE files. Your existing INI
files will work as before but newly created ones will be in UTF-16
and thus support double byte characters sets.
! SC compare(): Buggy when they were a different number of digits at
each slot. Fixed.
::echo compare("1.3", "1.12", "v"); // 1 (30 > 12)
::echo compare("1.0.0002", "1.0.001", "v"); // -1 (2 < 10)
+ SC confirm() enhanced:
Name: confirm
Syntax: confirm(text, [linebreaker])
Example:
::echo confirm("Should#I#stay#or#should#I#go#?", "#");
Code: Select all
v7.60.0026 - 2008-09-23 13:11
%%% Tabs: Now the List updates much smoother on tab change. Browsing
to particular files (not just folders) also got much smoother.
There are no limits to optimization...
+ Scripting got a new function.
Name: Compare
Action: Compare two strings.
Syntax: compare(string1, string2, [method=b])
method: b = [default] binary, bytes: strings are compared
alphabetically
i = same as b, but case-insensitive: A=a
n = numeric: strings are converted to numbers (fractions
use dot) and then compared numerically
v = version: compares file versions of formats like
#.## or #.##.#### or #.##.##.##
return: -1 if string1 < string2
0 if string1 == string2
1 if string1 > string2
Examples:
::echo compare("a", "b"); // -1
::echo compare("a", "A"); // 1
::echo compare("a", "A", "i"); // 0
::echo compare("2", "12", "b"); // 1
::echo compare("2", "12", "n"); // -1
::echo compare("10.20.0025", "7.60.0026", "b"); // -1
::echo compare("10.20.0025", "7.60.0026", "v"); // 1
Code: Select all
v7.60.0025 - 2008-09-22 22:00
%%% Tree and File List snappier due to new strategy in icon retrieval,
and a couple of other inspired moments.
* Menu View | Current Tab | Views: Redefined the View selection
logic. Now each view item is a toggle between the view in question
and Details view.
Hence the item "Toggle Details/Thumbnails #1" could be removed
(use "Thumbnails #1" instead).
+ Toolbar: Added button "List View". Toggles between List View and
Details View.
+ Toolbar: Redesigned buttons for "Toggle Details/Thumbnails #1" and
"Views".
Note that you will have to re-add the "Toggle Details/Thumbnails
#1" button to your toolbar because of a necessary internal change.
* Menu Scripting | Try Script...: Now the step mode is enabled even
before the window is opened to give you a better visual feedback.
! Scripting: Spaces were trimmed before line-end comments. Not a
good idea. Fixed.
! Scripting: Variables list was buggy. Fixed.
! List View: Internal state was set only after the painting was
completed. Now it's set before. This should fix some issues where
the internal state was out- of-synch.
Code: Select all
v7.60.0022 - 2008-09-21 21:48
+ Tweak: Getting tired of typing "::" into the Address Bar when
debugging script lines I added this little tweak:
[Settings]
ScriptSmartDetect=1
Whenever the Address Bar content matches this:
(not a full path) AND (has ; anywhere) AND
(1st char != ?) AND (1st char != |)
it is interpreted as script, not as location. This allows Quick
Searches like ?gif;png and Visual Filters like |gif;png, and
recognizes scripts even with line-end comments, like:
echo ("0" > "")?"True":"False"; //True
Works for me.
+ Scripting got a new function.
Name: Eval
Action: Evaluate an expression.
Syntax: eval(expression)
Examples:
- $a = "1 + 1";
echo $a; //1 + 1
echo eval($a); //2
- $a = '<xypath>';
echo $a; //<xypath>
echo eval($a); //C:\Progs\XYplorer
- // Little calculator
input $math, "Paste your math:", "1+1";
echo "The result is: " . eval($math);
- Scripting: removed SC "try". Reason: superfluous.
* Menu Scripting | Try Script...: Now step mode is always auto-
enabled (if not enabled anyway) when you run a script from the Try
window. The previous state is restored when done.
! Scripting: Would not parse ::msg"Hi!" correctly. Fixed.
! Scripting: Would forget to reenable stepmode after finishing a
script under certain cnditions. Fixed.
Code: Select all
v7.60.0019 - 2008-09-20 16:01
* Scripting: You now can assign fractions without quoting them.
::$a = 1.2; echo $a * 0.5; //0.6
::echo 1.2 + 2.1; //3.3
Note that you have to collaborate with the parser a little. If you
do the following, the result might not meet your expectations:
::$a = 0.5; echo $a.2; //0.5.2
The NEW rule: A dot directly followed by a digit is not
interpreted as a concatenator but as a decimal separator.
A blank after the dot will make the difference here, and quotes
play their role, too:
::$a = 0.5; echo $a. 2; //0.52
::$a = 0.5; echo "$a.2"; //0.5.2
::$a = 0.5; echo "$a. 2"; //0.5. 2
So, for what it's worth, you now can "append" fractions to
integers like this:
::$a = 1; $b = $a.2; echo $b * 2; //2.4
! Scripting: Fixed a couple of glitches in math and comparison.
Code: Select all
v7.60.0018 - 2008-09-20 13:27
+++ Scripting now can do basic calculation using math operators +-*/.
Fractions and parentheses are supported.
Examples:
::echo 1 + 1;
::echo 1 - 2 - 3; // -4
::echo 1 - (2 - 3); // 2
::echo 1/3 + 1/3;
::echo 1 + 2 * 3;
::echo (1 + 2) * 3;
::echo 1/0; // error division by zero
::$a=3; $b=2; echo $a / $b; // 1.5
::$fraction = "1.5"; echo $fraction == 3/2; // true
::echo "1.2" + "2.1"; // 3.3
Remarks:
- Strings are converted to numbers as possible (just like in
comparisons).
::$a=""; $b="2"; echo $a + $b; // = 2
::$a="1a"; $b="2b"; echo $a + $b; // = 3
- The decimal separator is NOT locale specific (e.g. dot in US,
comma in Germany) but hard-coded to dot. This way scripts are
interchangeable between regions.
- To define fractional numbers you have to quote them:
::$fraction = "1.5"; echo $fraction / 2; // 0.75 (1.5/2)
::$fraction = 1.5; echo $fraction / 2; // 7.5 (15/2)
- Calculation uses 8-byte floating point numbers with the
following ranges:
negative: -1.79769313486232E308 to -4.94065645841247E-324
positive: 4.94065645841247E-324 to 1.79769313486232E308
Floating point arithmetic has its natural shortcomings so don't
expect too much in terms of precise accuracy down to the 12th
digit. A file manager is not a scientific calculator.
! Scripting: Comparison did not honour fractions. Fixed. This works
now as expected:
::echo "10.3" > "2.2"; //true
+ Scripting got a new command.
Name: Echo
Action: Show simple message box.
Syntax: echo text
Examples:
::echo "hi!";
::echo <date>;
Remarks: It's the smaller brother of msg. Added mainly for
copy+paste compatibility with PHP code.
! Scripting: Nesting ternaries did not work as expected:
::msg (1==1)?((2==2)?"yes":"no"):"error"; //should be "yes"
Fixed.
! Scripting: Nesting comparisons did not work as expected:
::msg (1==1) == (2==2); //should be 1 (True)
Fixed.
! Scripting: Numerical comparison was invoked if any of the operands
was numerical. Wrong: _both_ operands need to be numerical! Fixed.
::echo ("0" > ""); //true (1)
::echo ("0" > "0"); //false (0) (numeric)
::echo ("0" > "00"); //false (0) (numeric)
::echo ("0" == "00"); //true (1) (numeric)
::echo ("0" == "")"; //false (0)
::echo ("a" == "")"; //false (0)
::echo ("a" == "0")"; //false (0)
::echo (0 == ""); //false (0)
::$foo=0; echo ($foo == ""); //false (0)
! Scripting: Would ignore functions when one or more blanks were
between function name and opening parenthesis. Fixed. Now you can
do this:
::msg quote ("pluto");
! Scripting: Setting variables using equal-operator would convert
the variables to lower case internally. Fixed: Case is preserved
now, and this works as expected:
::$myText = "Howdy!"; echo $myText;
! SC "load": In a passed list of script labels any blanks were not
trimmed. Fixed.
Code: Select all
v7.60.0017 - 2008-09-19 09:09
+ Scripting got a new function.
Note: The command getinfo is converted into a function! Since it was
introduced after the last official release it's still considered
BETA so there's no compatibility code. IOW: You have to upgrade your
scripts if they use getinfo.
Name: GetInfo
Action: Get various info into variable.
Syntax: getinfo(info, [param1])
info: [required] sort of info (New: *NOT* case-sensitive!)
param1: [optional] depends on info
return: retrieved info
Possible values for info and param1:
- "CountSelected", [(unused)]
Count of selected items in List.
- "SelectedItemsPathNames", [delimiter=CRLF]
All selected items (full path) in List, delimited by param1.
- "SelectedItemsNames", [delimiter=CRLF]
All selected items (name, no path) in List, delimited by param1.
Examples:
::$a=getinfo("CountSelected"); msg $a;
::$a=getinfo("SelectedItemsPathNames", "|"); msg $a;
::msg getinfo("selecteditemsnames", chr(10));
! Scripting: Empty string "" was wrongly interpreted as numerical
operand in a comparison. Fixed.
! Duplicate servers in Tree/Nethood under certain conditions. Fixed.
Code: Select all
v7.60.0016 - 2008-09-18 14:53
! Scripting: Unquoted comparison operators inside functions lead to
mal-parsing:
::msg quote(<clipboard>);
::msg quote(2>1?"true":"false");
Fixed.
Code: Select all
v7.60.0015 - 2008-09-18 12:47
+++ Scripting proudly presents its first function!
Name: quote
Action: Double-quote a string.
Syntax: quote([string])
return: quoted string
Examples:
::msg quote("a"); // "a"
::msg quote(1); // "1"
::msg QUOTE(1); // "1"
::msg quote(); // ""
::msg quote; // quote
Of course, nesting and concatening is no problem:
::$a=quote(quote(quote("b"."c")."d")."e".quote("f"));
msg "Quotes added using function quote(): $a";
Notes on functions
~~~~~~~~~~~~~~~~~~
(1) Function names are not case-sensitive: QUOTE() = quote().
(2) Even without any argument -- e.g. quote() -- the parentheses
are mandatory, else the function is not recognized.
(3) Functions are not interpolated when inside double-quotes.
::$a = "clever"; msg "Wow, quote($a)!";
= Wow, quote(clever)!
::$a = "clever"; msg "Wow, ".quote($a)."!";
= Wow, "clever"!
(4) Step Mode: Functions are individually stepped. The current
script line is marked green when a contained function is
stepped as opposed to the main command of the line.
You can even skip (button Skip) functions individually, in
which case the function name is returned with the resolved
arguments. For example:
::msg quote(chr(64));
If you continue both functions the result is:
"@"
If you skip chr() and continue quote() the result is:
"chr(64)"
If you continue chr() and skip quote() the result is:
quote(@)
If you skip both functions the result is:
quote(chr(64))
(5) Step Mode: When you "Continue without Stepping" on a function,
the stepping is only suspended for all functions in the
current script line / command.
+ Scripting got a new function.
Name: chr
Action: Return a specific character.
Syntax: chr(charcode)
charcode: valid range 0-65535 (0xFFFF)
return: character
Examples:
::msg chr(88).chr(89);
::msg chr(28888); // looks Chinese to me
::msg quote(chr(28888)); // yep, of course you can mix 'em
Remarks:
Values outside the valid range but inside 32 bit are silently
corrected using a bit mask (AND 0x0000FFFF). Values outside 32
bit are set to 0.
+ Scripting got a new function.
Name: confirm
Action: Pops message box with OK/Cancel, returns result.
Syntax: confirm(message)
return: 1 on OK, 0 on Cancel
Examples:
::msg confirm("Ok?");
::msg "You pressed " . (confirm("Ok?")==1?"OK":"Cancel") . ".";
::msg confirm("Ok?") . confirm("Are you sure?");
+ SC "input" in its single-line variant would accept multi-line
default values, e.g. when the default was retrieved from clipboard
as in:
::input $a, "Enter URL", <clipboard>;
Fixed: Now only the first line is taken in such cases.
+ Scripting | Step dialog: Now you can view a list of all variables
currently on the stack. There is a button which is only shown when
there are any variables. You may also use the context menu, or
simply press "V".
Note that if the Step dialog is used for showing an error message,
currently no variables can be shown. Might be added later.
* Scripting | Step dialog: Some design changes.
+ Scripting: Now commenting is supported everywhere. So you can
paste this into the Address Bar and it will work:
::msg /*they can be inserted anywhere!*/ "hi!" /* anytime */;
Same for Favorites, PFA/POM, and wherever Quick Scripting is
supported.
* Scripting: Comparisons are now done as in PHP. The rule is: "If
you compare an integer with a string, the string is converted to a
number. If you compare two numerical strings, they are compared as
integers."
::msg (0 == "a"); // 0 == 0 -> true
::msg ("1" == "01"); // 1 == 1 -> true
::msg ("1" == "1e0"); // 1 == 1 -> true
::msg ("1" < "2"); // 1 < 2 -> true
::msg (" 1" < " 2 "); // 1 < 2 -> true
::msg ("-2" < "-1"); // -1 < -2 -> true
::msg ("0"?"true":"false"); // 0 -> false
::msg ("2"?"true":"false"); // 2 -> true
::msg ("a"?"true":"false"); // 0 but not "0" -> true!!
If both parts are non-numeric then the comparison is alphabetical:
::msg ("2a" < "10a"); // -> false!
The valid range of compared integers is -2147483648 - 2147483647
(32 bit). Numbers outside that range are silently converted to 0
(zero) before the comparison takes place.
! Scripting: Closing the app while a script was running could lead
to a crash. Fixed.
! Scripting: A comment like /* ' */ (containing a single or double
quote) would take out everything following it. Fixed.
! List: Doing menu Go | Up while a long search (> 500 msecs) was in
progress would lead to a confused list. Fixed: Now this action will
first stop the search. Then you have to Go | Up again to continue.
Code: Select all
v7.60.0012 - 2008-09-16 15:14
+ Scripting: Now commenting at line ends is supported. Comments
begin with a double-forward slash (outside of any quotes) and end at
the end of the line.
Examples:
- $a = <xypath>; assert $a=="<xypath>"; //should not fail
- $a = <xypath>; //assign XY path
assert $a=="<xypath>"; //should not fail
- "getinfo CountSelected" // comment
getinfo $count, // comment
"CountSelected"; // comment
assert $count!=0, // comment
"You must select a file before running this script!"
+ Scripting: Now block comments (aka C-style comments) are
supported. They start with /* (outside of any quotes) and end with
the next */ (outside of any quotes) and can span any number of
lines.
Examples:
- /* This is
a multi-line
block comment
*/ msg "hi!";
- msg /*they can be inserted anywhere!*/ "hi!" /* anytime */;
Remarks on Comments
~~~~~~~~~~~~~~~~~~~
(1) Line-end and block comments overwrite each other:
::msg "Hi!"; // /*this is not a block comment starting...
::msg /* //this is not a line end comment starting... */ "Hi!";
(2) Make sure you don't nest block comments. It is easy to make
this mistake if you are trying to comment out a large block of
code:
/*
msg 'This is a test'; /* Will cause a problem */
*/
This, however, will work since // overwrites the /* */ comment:
//msg 'This is a test'; /* This comment is NO problem */
(3) Comments are not supported in Quick Scripting! This is
everywhere where no multiline scripts are possible: So they
won't work in the Address Bar, PFA, Favorites...
+ Scripting: Now you can nest expressions using parentheses, aka round
brackets: ( ). There's no practical limit to nesting depth and
superfluous parentheses are silently removed.
Examples where parentheses are merely decor:
::msg "a" . "b";
::msg ("a" . "b");
::msg ("a") . ("b");
::msg (("a") . ("b"));
::msg ((("a") . ("b")));
::msg "a" . "b" . ();
= ab
::msg "a" . ("b" . "c");
::msg ("a" . "b") . "c";
= abc
::msg "a" == "a" . "a" == "b";
::msg ("a" == "a") . ("a" == "b");
= 10
Examples where parentheses actually make a difference:
::msg "a" == "a" . "a";
::msg ("a" == "a") . "a";
= 1a
::msg "a" == ("a" . "a");
= 0
Examples for nesting errors:
::msg ("a" . "b"; // ')' missing!
= ("a" . "b"
::msg "a" . "b"); // '(' missing!
= a"b")
! Icon Overlays were not always correctly auto-refreshed in Tree and
List. Fix #2.
Code: Select all
v7.60.0010 - 2008-09-15 22:08
+ Toolbar: Added button "Show Tree".
! A FVS related bug from 7.50 could still survive in corrupted INIs
and fvs.dat files. Fix #2.
* Scripting: It is not necessary anymore (but allowed) to surround
comparison operators with blanks.
However, to avoid ambiguities in parsing, you have to put XY
internal variables (<curpath>, <xyver>...) within doubled quotes
strings _IF_ they are to be interpolated!
::msg <xypath>; = okay, variable is isolated
::msg "<xypath>"; = okay, variable is isolated & quoted
::msg "XY = ".<xypath>; = okay, variable is isolated
::msg XY = <xypath>; = NOT okay, variable is interpolated
but not quoted
::msg "XY = <xypath>"; = okay, variable is interpolated &
quoted
These work all the same:
::assert <xyver>>="7.60.0009"
::assert "<xyver>">="7.60.0009"
::assert <xyver> >= "7.60.0009"
::assert "<xyver>" >= "7.60.0009"
::assert ("<xyver>" >= "7.60.0009")
! SC "text" would get confused with UNIX files (linefeed = LF) when
a line breaker was active. Fixed.
Also added support for Max files (linefeed = CR).
! Scripting: A Ternary Conditional and a Comparison could under
certain conditions be processed when inside quotes. Fixed.
Code: Select all
v7.60.0009 - 2008-09-15 12:51
! Scripting: The ternary conditional was repeatedly processed with
unpredictable results. Fixed.
! SC "download" failed when target path/file name was passed (since
yesterday). Fixed.
+ Scripting: Now comparisons of two values are evaluated in-place.
The "comparison" has the form
"a" operator "b"
where "a" and "b" are whole strings (yet without any
concatenators, but this will change soon...), and "operator" can
be one of the following:
== Equal
!= Not Equal
< Less than
> Greater than
<= Less than or Equal to
>= Greater than or Equal to
NOTE: To prevent ambiguities with XY internal variables
(<curpath>, <xyver>...) the comparison operators must be
surrounded by blanks!
If the comparison evaluates as True it is set to "1", else it is
set to "0".
Examples:
::msg "a" == "a";
= shows '1'
::msg ("a" == "a") . ("a" == "b");
= shows '10'
::$r = ("a" == "a"); $r = ($r == 1?"True":"False"); msg $r;
= shows 'True' (note that the parentheses are optional)
::$comparison = "a == a"; assert $comparison == "a == a";
= no assertion error
::$minver="7.60.0009"; assert <xyver> >= $minver,
"This script needs at least XY $minver!"
* Scripting, ternary conditionals:
NOTE: To prevent ambiguities with XY internal variables
(<curpath>, <xyver>...) the comparison operators must be
surrounded by blanks!
* Scripting Tip: It's strongly recommended that you (double- or
single-) quote your strings because more and more characters acquire
a special meaning in scripting. The following are (or soon will be)
such special characters:
;,.?:(){}[]<>!=+-*/\"'&|$%
* Scripting | Step dialog: Now the options menu also appears on
right-clicking any of the two lists.
! Icon Overlays were not always correctly auto-refreshed in Tree and
List. Fixed.