Tuesday, December 30, 2008

v7.90.0023 - 2008-12-30 20:54

  • * SC run: Now there's a modal dialog while the shelled process is being active. It blocks you from doing anything but wait or cancel the waiting and continue with the script.
  • ! Scripting: Parsing multiline scripts still went wrong where TABs were used in place of spaces. Fixed. Now all TABs outside single or double quotes are replaced by spaces.
  • * Info Panel: Changed "apply" icon for time-stamping from green cross to green tick.
  • * Updated the help file.

v7.90.0022 - 2008-12-30 12:15

  • * SC run experimentally enhanced:
      Syntax: run command, [wait=0]
        command: module name plus (optionally) arguments
                 module names containing blanks must be quoted
          0 = return immediately and continue the script
          1 = only continue when the shelled process has finished
        ::run '"C:\Programme\WinZip\WINZIP32.EXE" -min', 1;
          msg "Done!"; //shows "Done!" when WinZip is closed
        ::run "notepad C:\Programme\XYplorer\ReadmeXY.txt", 1;
          msg "Done!" //shows "Done!" when notepad is closed

    Contrary to using "run" with wait=0, wait=1 is not fully identical
    to the Windows Run command: Not all sorts of commands work, there
    is less smartness built in.
    For example, you cannot call documents that will be opened by the
    associated application. This will NOT work:
      ::run "C:\Programme\XYplorer\ReadmeXY.txt", 1; //NO JOY
    You also canNOT use short forms like this:
      ::run winzip, 1; //NO JOY
    However this works (don't know why, maybe because it's in the path):
      ::run notepad, 1; //OKAY
  • ! Catalog: Drag'n'Drop got a bit confused when you stated paths with wrong capitalization (which under Windows should not matter). Fixed.
  • ! Scripting: Parsing multiline scripts went wrong when lines began with a mix of TABs and spaces. Fixed.

Monday, December 29, 2008

v7.90.0021 - 2008-12-29 11:30

  • + Scripting got a new function.
      Name:   StrRepeat
      Action: Repeats a string
      Syntax: strrepeat(string, count)
        string: string to be repeated
        count:  number of repetitions
        return: repeated string
        echo strrepeat("abc", 2); //abcabc
  • * SC loadtree: Now the pathlist parameter is optional and defaults to the current path if missing.
      Syntax: loadtree [pathlist], [modify=0]
  • ! Crash when selecting EXE with malformed version info. Fixed.
  • ! Find Files tab: Location box showed Visual Filter overlay when multiple locations were separated by "". Fixed.
  • ! Tree folder context menu: "Create New Subfolder here" did enter rename mode for the wrong folder when tree was locked. Fixed. No rename mode is entered in tree since the new folder is not part of the locked tree.
  • ! Folder View Settings: Auto-changed default FV wasn't updated after changing list modes. Fixed.
  • ! Scripting: When parsing multiline scripts, all Tab chars were replaced by two spaces. Fixed.
  • ! CKS dialog: "Copy Cheat Sheet" using "Scope" created a messed up layout because "Triggered on KeyDown" was printed on a new line. Fixed.

Tuesday, December 23, 2008

v7.90.0019 - 2008-12-23 15:08

  • * SC rename: Now, when you cancel the operation and it's the last line in the script you get no more "error" message about "Rename failed or was cancelled".

Monday, December 22, 2008

v7.90.0018 - 2008-12-22 15:45

  • + Media Preview: Added minimal media control buttons. Both "Play" and "Pause" have identical functionality, namely toggle Play / Pause, with inverse pressed-states. "Stop" rewinds to beginning and stops there.
  • * Media Preview: Swapped buttons' functionality when clicking progress bar. Now you *Left*-click to seek a new position (which is the expected behavior), and you *Right*-click to play/pause.
  • ! Media Preview: Fixed some glitches with Audio-CD playing.

Sunday, December 21, 2008

v7.90.0017 - 2008-12-21 22:04

  • + Media Preview: Now the progress bar's tooltip shows the timeline position of the cursor.
  • + Media Preview: Added keyboard-driven backwind and forewind. Works in paused and running mode, on audio and video.
      Left:  Frame step backward (Audio: 100 msec backward)
      Right: Frame step forward  (Audio: 100 msec forward)
      Shift+Left:  1 sec backward
      Shift+Right: 1 sec forward
  • ! Media Preview: Rounding error in frames per second calculation let to one-off under certain circumstances. E.g. the typical FLV video file has 25 fps but XY showed only 24 fps. Fixed.

Saturday, December 20, 2008

v7.90.0016 - 2008-12-20 17:36

  • + Media Preview: Added a way to repeat any particular section of the medium (audio or video), aka "A-B repeat". Looping must be enabled (tick "Play Again") to make it happen. The section is defined by clicking anywhere (no matter where) on the progress bar while the medium is previewed (no matter whether running or paused):
      Ctrl+LeftClick:  Set start of section to now
      Ctrl+RightClick: Set end of section to now
      Ctrl+Alt+Click:  Unset any section
    If a section start is defined then "Go To Beginning" (Shift+Space, or Shift+Click) will go to the beginning of the section. There is no visual marking of the section, so this is a low-comfort / low-documentation feature for the time being. But it works okay and can be useful.
    The section is auto-unset when you preview the next file.

v7.90.0015 - 2008-12-20 10:44

  • + Spot now supports an unlimited number of strings, separated by | (pipe). Four predefined colors are rotated. For example:
      >7.|xy|2008| |-|~

Friday, December 19, 2008

v7.90.0012 - 2008-12-19 17:55

  • + Added "Spot" (working title): A new highlighting feature inspired by the Google Toolbar and the Firefox Searchbar. For the time being it has no separate GUI but can be invoked via the Address Bar (or any of the other location interfaces). Simply type in a string prefixed with ">" and press Enter. The string will be
    highlighted in the file list wherever it's found (case-insensitive: a=A).
    For example:
      >p [Enter] = highlight all letters "p" and "P"
    To turn it off again type a single ">":
      >  [Enter]
    The highlighting is not retained across sessions.

Thursday, December 18, 2008

v7.90.0010 - 2008-12-18 21:14

  • ! Favorite Folders: A favorite like this
      "Append modified date" ::rename "b", "*-<datem yyyymmdd>"
    lost its outer quotes across sessions. Fixed.

v7.90.0008 - 2008-12-18 13:55

  • + Added new file type to the set of previewed Web & Office formats:
      *.xps XML Paper Specification
      aka "Microsoft's PDF competitor"
    XPS files can be previewed only if your system supports it. For example to enable XPS support on Windows XP SP3, you can install the Microsoft .NET Framework 3.0. There are other ways, too.
  • ! Various controls (Tree, List, Catalog, Tabs) allowed dbl-clicks from other than the left mouse button to be processed as dbl-clicks. Fixed: Now only left-button dbl-clicks count as dbl-clicks.
  • ! Mini Tree: With Mini Tree enabled, passing the startpath via command line didn't work, nor did setting a permanent startpath. Both fixed.

Wednesday, December 17, 2008

v7.90.0006 - 2008-12-17 15:16

  • ! Find Files: "Loose Boolean Match" (LBM) -- AND-combining patterns using " " (space) in Standard Mode -- did not work as expected when the patterns contained certain words or characters that are used in Boolean search patterns, e.g. " and ", " or ", " & ", or "(". Fixed. BTW, note that OR-combining patterns (using ";") has precedence over LBM, so the following search term (in Standard Mode)
      a;b c
    is interpreted as
      "*a*" OR "*b c*"
    and not as
      "*a;b*" AND "*c*"
  • * Find Files "Loose Boolean Match" (LBM): in v5.50.0008 (2007-01-06 12:26) a feature was added where you could invert/negate the individual arguments of the LBM search term:
      Desktop?a b !c Find all items that contain the characters
                     a and b, but not c in their name.
    This is not supported anymore! To achieve this you should use the full Boolean syntax instead:
      Desktop?:a & b & !c
    What you still can do is invert the *whole* LBM expression by prefixing a "!":
      Desktop?!a b c Find all items that do not contain the
                     characters a and b and c in their name.
  • ! List: Since about 3 weeks ago, XY reported drives as "currently not available" when they were in fact just empty. Fixed.

Tuesday, December 16, 2008

v7.90.0005 - 2008-12-16 12:32

  • + Outlook Drop: Now dropping messages in Hebrew and Arabic is supported (codepages Windows-1255 and Windows-1256).
  • ! Mini Tree: Fixed some glitches with the locked Mini Tree where folders were automatically added (which should never happen on a locked tree).

Monday, December 15, 2008

v7.90.0004 - 2008-12-15 09:28

  • + Configuration | Startup & Exit: Now tells you when the instance was started and how long it is running (difference between startup time and now). The maximum duration that can be displayed is 68 years, 35 days, 3 hrs, 14 mins, 7 secs. Should suffice even for larger file copy operations on Vista... ;)
  • * Configuration: Reorganized the previous "Report" page. Now it's two pages, "Templates" and "Reporting".

Wednesday, December 10, 2008

v7.90.0002 - 2008-12-10 22:03

  • + Menu User: Added tweak to hide all UDCs from the menu that have a caption (text field "Caption") beginning with an underscore (analogous to hidden scripts), e.g. "_hidden".
    *** NOTE *** Please make a backup of your current udc.dat before
    testing this BETA version! This is tricky stuff and there's a
    chance that your udc.dat gets corrupted when playing with hidden
  • * Tweak HideEmptyUserMenus=1 is now the default setting for fresh installations.
  • ! Mini Tree: The "hand" overlay was not shown for the icons of shared folders. Fixed.
  • ! Mini Tree: Changing the setting for "Show Hidden Files and Folders" (and similar commands) would refresh the whole tree loading all existing childs of the currently visible folders. Fixed: Now the tree remains unchanged.

Tuesday, December 9, 2008

v7.90.0001 - 2008-12-09 20:29

  • + Menu User: Added tweak to hide those categories without contents. By default they are shown but disabled.
  • ! Portable Openwith Menu: The predefined item that comes with fresh nstallations did not work correctly because of missing quotes:
      +"Append modified date" \;*>::rename b, *-<datem yyyymmdd>
    The right syntax is:
      +"Append modified date" \;*>::rename "b", "*-<datem yyyymmdd>"

Monday, December 8, 2008

v7.90.0000 - 2008-12-08 12:00

Main changes since last release:

  • +++ Mini Tree: A revolutionary new approach to browsing the file system, combining folder tree and history.
  • +++ Quick Searches now support multiple locations.

Saturday, December 6, 2008

v7.80.0040 - 2008-12-06 20:33

  • * Updated the help file.
  • ! Glitches.

Friday, December 5, 2008

v7.80.0036 - 2008-12-05 09:17

  • + Toolbar |Mini Tree: Added the following command to the context menu.
    - "Mini Tree From History"
      Loads a Mini Tree made from the recent history. The history is
      scanned backwards until the 4 deepest paths are collected that
      are not in a mutual parent-child relation. Yep, it's hard-coded
      to the magical number 4. Works for me but you might want more,
      let's see...

Thursday, December 4, 2008

v7.80.0035 - 2008-12-04 12:37

  • * List: When blocked because of an unavailable location, now the list still can hold the input focus. A dbl-click onto the blocked list now will go up one level.
  • ! Mini Tree: When browsing to new servers on the fly they were added to the tree but not to the list. Fixed.
  • ! Breadcrumb: Did not work as expected on a Locked Tree when going up from a server to Nethood.
  • * Breadcrumb: Now the "Nethood" (aka My Network Places) node is featured in the Breadcrumb.

Wednesday, December 3, 2008

v7.80.0034 - 2008-12-03 14:23

  • ! Scripting: The recursion checker, when it fired, showed the wrong listing and wrong stack depth in Step Dialog. Fixed.
  • * Scripting | Step Dialog: Now the Stack Size (previously called "Stack Depth") is displayed if it's greater than 0. If one script calls another the Stack Size is increased by 1.

Tuesday, December 2, 2008

v7.80.0033 - 2008-12-02 09:06

  • + Menu Favorites | Special System Folders: Added three virtual folders, just to make them reachable via menu and KS:
      - Desktop
      - My Documents
      - My Network Places
  • + Tree | Folder Context menu: Now, on Mini Tree, you find a new command "Hide Folder" inside the submenu "Expansion". Use it to hide non-current folders.

Monday, December 1, 2008

v7.80.0032 - 2008-12-01 12:59

  • + SC input(): Added optional parameter "cancel" which allows you to freely define a value that's returned in case the user cancels the dialog:
    Syntax: input(topic, [notes], [default], [style=s], [cancel])
      [cancel]: value to be returned when user cancels
                if missing the script is terminated on cancel
      ::$a = input("Enter your name!",, "Jimi",, chr(12)); echo $a;
  • * SC input(): The command does not throw an error anymore when the user cancels the dialog. The behavior now depends on the new parameter cancel (see above).
  • * Input dialog: Radically rewritten. Now the necessary height for the notes is auto-calculated. Also, now it does support Unicode in topic and notes strings.

Saturday, November 29, 2008

v7.80.0031 - 2008-11-29 17:00

  • + SC loadtree: Enhanced the "add" parameter, now called "modify".
      Syntax: loadtree pathlist, [modify=0]
        pathlist: list of paths separated by (pipe)
                  if modify = 0 then the current tree folder is set to
                  the first path
        [modify]: 0: [default] fresh tree from scratch
                  1: add paths to current tree
                  2: hide paths from current tree
        ::loadtree "E:F:", 2; //hide drives E: and F:
  • + Configuration | Interface Colors | Tree: Added a color field for Locked Tree.
  • % Tree and List: Increased snappiness of painting.
  • ! Mini Tree: Fixed a couple of glitches concerning Auto-Refresh. Generally, no folders should be automatically added to the Mini Tree via an Auto-Refresh. OTOH, you'd expect to see the folders created through drag-n-drop when the target parent folders are expanded. Also, rename operations should be reflected in the Mini Tree. Tricky stuff, but I'm getting there...
  • ! Mini Tree: With "Flat plus-minus icons" enabled the plus-minus icons did not show the expected white on blue coloring. Fixed.

Friday, November 28, 2008

v7.80.0030 - 2008-11-28 20:41

  • + Scripting got a new function.
      Name: Input
      Action: Returns user input.
      Syntax: input(topic, [notes], [default], [style=s])
        topic:     topic line, printed in bold on white
        [notes]:   text, can be multiline, printed on grey
                   only used with style "s" (singleline)!
        [default]: default value
        [style]:   s|m|w = singleline[default]multilinewrapped
        return:    user input
        ::$a = input("Enter Query", _
          "Codes:<crlf>h=XYwiki<crlf>x=XYforum", "Mini Tree");
        ::$a = input("Enter Script",,'echo "Hi!"', "m"); load $a,,"s";
      Note: The same-named statement "input" is still available but
  • * Scripting Step Dialog: Now "Copy Command (Parsed and Resolved)" will copy the actual data, not the version tuned for display (where non-printable chars are replaced by pilcrows or middots). Arguments are separated by CRLF----CRLF (CRLF = 0x1310).
  • * Scripting | Step Dialog: Added command "Copy Variables" to the context menu. It will copy the unaltered variables "as is" to the clipboard, in the following sample layout:
      $a =
      $b =
  • * Menu View | Lock Tree: Now, the locked tree never scrolls (whether MiniTree or not), but always selects the current folder if it is present in the tree.
  • * SC loadtree: Now, if parameter add = 1, the current folder is NOT set to the first path in the list but stays where it is.
  • ! Mini Tree: Couple of glitches fixed. Among others the following:
    - On a Mini Tree, pressing F4 (Refresh Tree) will show you the
      reality for your current tree while keeping it in "Mini" mode:
      All expanded nodes will be filled with their really existing
      child nodes.
    - On a Mini Tree, when the current node is MyComputer, then
      pressing Shift+F4 (Refresh Current Folder) will reset the Tree and
      list all child folders of MyComputer in collapsed state while
      keeping the tree in "Mini" mode.
  • * Script syntax: Before had to insert a blank after the command when the first argument was missing:
      ::loadtree , 1;
    Now you can do this:
      ::loadtree, 1;
  • * Toolbar | Mini Tree: Added the following commands to the context menu.
    - "Convert to Mini Tree"
      Converts the current Maxi Tree to a Mini Tree, but does not
      minimize the tree (which is what command/toggle "Mini Tree"
      does) but just sets it to "mini mode": From now on only used
      paths are added to the tree.
    - "Load Last Mini Tree"
      Loads the last Mini Tree before the Tree was converted to Maxi.
      Useful when you quickly turn on Maxi Tree for a task and then
      want to go back to the previous Mini state.
      If the current session did not have a Mini Tree yet, the last
      INI-stored Mini Tree is loaded.
    - "Hide Current Folder"
      Hides the current folder from the Mini Tree (not from your hard
      disk). Since there must be a selection the parent folder is
  • * Mini Tree: Now, the Mini Tree that's saved across sessions is limited by number of chars (namely 1023) rather than number of paths (was 32). This limit is caused by the current max size for INI keys which is 1023 chars.
  • * Tree: v5.60.0001 (2007-01-28 21:04) added: Hold SHIFT key when clicking plus/minus icons to "Fully Expand" and "Fully Collapse". This is now changed to "Hold CTRL key..." to avoid creating a new tab (due to held SHIFT) when the location changes because the current one is now inside a collapsed folder.

New pricing announced, with lower US dollar prices!

Prices have been adjusted for current international exchange rates, and also due to the current global economic crisis. The result is a BIG PRICE CUT, especially for customers paying in US$: The Lifetime License went down from US $59.95 to US $44.95!!!

Standard License
BEFORE: single €19.95 -- US $29.95 -- £14.95 each
   NOW: single €19.95 -- US $24.95 -- £16.95 each

Lifetime License
BEFORE: single €39.95 -- US $59.95 -- £29.95 each
   NOW: single €34.95 -- US $44.95 -- £28.95 each

Thursday, November 27, 2008

v7.80.0028 - 2008-11-27 11:35

  • + Mini Tree: Now the Mini Tree is saved across sessions. Because theoretically a tree can be very large, a limit has been built in: Only trees with maximally 32 paths are saved. Larger trees (which would not count as "Mini" anyway IMO), are not saved.
  • * Menu View | Auto-Synchronize Tree: Renamed it to "Lock Tree", inversing the logic. What was "Auto-Synchronize Tree" UN-checked before is now "Lock Tree" CHECKED. Reason: It's more intuitive this way.
  • * Menu View | Lock Tree: Undid the changes announced in v7.80.0027 (auto-select folders that are present in the tree) for non-Mini Trees, but kept them for Mini Trees.
  • + Scripting commands enhanced:
      - setting, settingp
        New named argument "locktree"
          = enable/disable Lock Tree
          ::setting "locktree", 1; msg "Look, the tree is grey!"
        Note: The old "autosynctree" (with inverse logic) is kept for
        backward compatibility, however is deprecated (and removed from
        the documentation). You should use "locktree" in your scripts
        from now on!
  • + Scripting commands enhanced:
      - setting, settingp
        New named argument "allowrecursion"
          0 = show warning on recursions
          1 = simply go on and hope that the script writer
              knows what they are doing
          ::setting "allowrecursion", 1;
        Note: This command is just using a simpler name for the
        already existing INI tweak "ScriptRecursionWarningOff".
  • * Scripting | Step Dialog: Now (non-printable) CRLF sequences are displayed using the pilcrow (¶) character. Before, they were shown as two dots (..). Other non-printable characters are now displayed as "·" (mid dot). Before, they were shown as dots (.).
  • * Scripting | Step Dialog: Pressing F1 now shows the Help chapter "Scripting Commands Reference". Same for the Edit multiline script dialogs in Catalog and UDC.

Wednesday, November 26, 2008

v7.80.0027 - 2008-11-26 13:43

  • * Menu View | Auto-Synchronize Tree: Now those folders that are already present in the Tree are selected, highlighted, and moved into view as in a normal synchronized Tree. So the non-synchronized Tree gives you as much feedback as it can without doing any browse or expansion work.
  • * Starting up with Auto-Synchronize Tree OFF and MiniTree ON did only show the MyComputer node. While technicaly correct, I felt this was a bit unsatisfying (a touch too minimal maybe?). Now the startup path is expanded and selected in the Tree.
  • * Toolbar | Mini Tree: Added "Auto-Synchronize Tree" to the context menu.

Tuesday, November 25, 2008

v7.80.0026 - 2008-11-25 21:47

  • * SC "new" enhanced. The syntax is unchanged but there are some new options and behaviors.
    Syntax: new name, [type=filedir], [source], [r]
    - Now you can pass a full path/name in the "name" argument. If no
      path is passed, the current path is taken as default.
    - If the target folder does not exist it is created on the fly.
    - The "last target" path (used by Ctrl+Alt+F7) is set to the
      target folder.
    - Not new but just as a reminder: The "new" command will never
      overwrite an existing file of the same name, but automatically
      append a number suffix to the name of the newly created file.
    - // creates new empty file "Kabul.txt" in folder "E:\Afgh\"
      ::new "E:\Afgh\Kabul.txt"
    - // creates new path "E:\Afgh\Kabul\EastEnd\"
      ::new "E:\Afgh\Kabul\EastEnd\", "dir"
    - // copies "C:\Temp\Kabul.png" to "E:\Afgh\Kabul-copy.png"
      ::new "E:\Afgh\Kabul-copy.png", , "C:\Temp\Kabul.png"
    - // copies the current item to "E:\Afgh\", suffixed with "-copy"
      ::new "E:\Afgh\<curbase>-copy.<curext>", , <curitem>
  • * UDC | New. The above enhancements also apply to the UDC New.
  • ! SC rename: When renaming a file outside of the current path (using the "source" argument), a same-named file in the current path was shown as renamed in the list (although it correctly was not renamed). Fixed.

Monday, November 24, 2008

v7.80.0025 - 2008-11-24 21:23

  • + SC loadtree enhanced by new "add" parameter.
    Syntax: loadtree pathlist, [add]
      pathlist: list of paths separated by (pipe)
                the current tree folder is set to the first path
      [add]:    0: [default] fresh tree
                1: add paths to current tree
    Remark: With add = 1 and the current tree still non-Mini, loadtree
    will convert the tree to a Mini Tree without losing any of its
    present folders. Interesting option! You can even convert it to
    Mini without adding anything by this line:
      ::loadtree , 1;
  • + SC getinfo got a new named argument "tree".
    Syntax: getinfo("tree", [delimiter = ""])
      [delimiter]: String to place between paths.
                   Defaults to "".
      return:      List of paths present in the current tree.
                   The current path is the first in the list.
      Mainly useful for creating the pathlist argument for the
      loadtree command.
      ::echo getinfo("tree");
      ::text getinfo("tree", <crlf>); //one path per line

v7.80.0024 - 2008-11-24 13:00

  • +++ Catalog: Added command "Make Mini Tree From Folders" to Category context menu. Will create a Mini Tree from all valid folders found within the Category.
    - If Mini Tree is not active it will be activated by this command
      (if any folders are found within the Category).
    - The current tree folder will be set to the first (from top)
      folder found within the category.
    - Portable Paths and Environment Variables are supported.
    Another quantum leap in file management. Finally, the Tree is yours.
  • + Catalog: The reverse command to the above is "Insert as New Category Here | Current Mini Tree". Will create a Category containing all unexpanded folders of the current Mini Tree (the command is not available if Mini Tree is off). The first folder is set to the current folder.
  • + Scripting got a new command.
      Name:   LoadTree
      Action: Load a specific Mini Tree.
      Syntax: loadtree pathlist
        pathlist: list of paths separated by (pipe)
                  the current tree folder is set to the first folder
        ::loadtree "C:D:";
        ::loadtree "<xydata>\scripts";
        ::loadtree "<curpath>|%programfiles%|<xypath>";
    Did I mention how cool this is?
  • ! Rename Special | Search and Replace: The replace-char(s)-by-string syntax did not work as expected. Fixed.
      ß>ss //replace all ß by ss
      123>(num) //replace all 1, 2, and 3 by "(num)"

Sunday, November 23, 2008

v7.80.0022 - 2008-11-23 17:54

  • ! Mini Tree: Couple of glitches fixed.
  • ! Toolbar: Drawing glitch with History per Tab buttons. Fixed.
  • * SC end: Inverted the logic of the "condition" argument. Now, as more likely to be intuitively expected, the script is terminated if the condition is TRUE, so it is the "condition to terminate".
    Syntax: end condition, [message], [scope=0]
      condition: if True the script is ended
                 else nothing happens
                 (True = anything but 0 or empty)
      ::end confirm("Are you sure to continue?") == 0, "Bye!"; _
        msg "Still here!";

v7.80.0021 - 2008-11-23 11:06

  • + Scripting got a new command.
      Name:   End
      Action: Terminate a running script.
      Syntax: end condition, [message], [scope=0]
        condition: if False (0) then the script is ended
                   else nothing happens
        [message]: message before ending
        [scope]:   0: [default] end whole script stack
                   1 (or any other value): end this script
        ::end 1==1; msg "Still here!"; //"Still here!"
        ::end 1==2; msg "Still here!"; //ends silently
        ::end 1==2, "Bye!"; msg "Still here!"; //"Bye!"
  • + Scripting got a new function.
      Name:   GetToken
      Action: Returns a substring by index.
      Syntax: gettoken(string, [index=1], [delimiter=" "])
        string:    source string; not changed by procedure
        index:     [opt.] index of token, 1-based; defaults to 1
        delimiter: [opt.] separator of tokens; defaults to " "
        ::echo gettoken("Donald Duck"); //Donald
        ::echo gettoken("a,b,c,d,e", 4, ","); //d
        ::echo gettoken("http://www.xyplorer.com", 2, "//"); _
  • * TitlebarTemplate: Added new field which is set to the current folder (without path).
  • ! Mini Tree: You could get doubled subfolders due to a little glitch in the logic. Fixed.

Saturday, November 22, 2008

v7.80.0020 - 2008-11-22 17:40

  • +++ Name Search (aka Quick Search): Now multiple locations are supported! They have to be separated by ";" (NOT "" because this would be confused with a Visual Filter). E.g., you may paste a line like this into the Address Bar:
    The three folders E:\XY\, C:\Temp\, and D:\Backup\ will be searched for GIF files.
    - The ";" may be surrounded by any number of blanks. Built-in
      smartness will recognize a ";" that's not a separator but part
      of a folder name.
    - Multi-Location Name Searches are remembered in tabs and across
    - As always with Name Searches, the settings in the Find Tab are
      not touched.
  • * Scripting: Injected some artificial intelligence into the parser.
    Things like the following now work as expected:
      ::echo <date w> + <date w>;
      ::echo <date w> + <date w> + <date w>;
      ::echo <date w> - 1;
      ::echo 1 + <date w>;
      ::echo 1 + <date w> - 1;
      ::echo (2==3) ? <date yyyy> : <date yyyy> + 1;
  • * Mini Tree: Now the plus/minus icons in the Tree will look different when Mini Tree is active. Feedback.
  • + Toolbar | Mini Tree: The button got a context menu with some related commands. There's also a 2nd instance of "Auto-Optimize Tree" which is also available in Configuration | General.
  • ! Catalog could be fooled into thinking it got the focus while it had not, resulting in various weird effects like showing message "Pasting items here is not allowed." in the wrong contexts. Fixed.
  • ! Focus cycling between the main controls using F6 was a bit buggy since a while. It only worked as expected when all four controls were visible. Fixed.

Friday, November 21, 2008

v7.80.0018 - 2008-11-21 16:32

  • +++ Menu View: Added the revolutionary "Mini Tree". Now it's official.
  • + Toolbar: Added button "Mini Tree". Made from a racing flag (speed) and a minimal chess board (mini). (The temporary scripting command is gone now.)
  • + MiniTree: The revolution reached its final state of radicalness. Now even drives, special folders, and Nethood are shown only when they have been used.

v7.80.0012 - 2008-11-21 10:27

  • ! MiniTree: Fixed some glitches.
  • * MiniTree: Remarks on collapsing and expanding nodes if MiniTree is ON.
    - If you Fully Collapse a tree node (Numpad Divide) it is not only
      collapsed but reset to initial state: When you expand it in the
      tree it will do a fresh browse and show all existing subfolders.
    - OTOH, if you just collapse the node by clicking the minus-icon
      and then expand it again, no browsing will happen and the
      minimal tree state is preserved.
    - A destination node is never expanded.
  • * MiniTree: Now, when you de/activate MiniTree, the whole tree is rebuilt, so you have an immediate effect.
  • * Menu View | Rebuild Tree: Now the expansion state of the current node is preserved.
  • + List: Now you can toggle-select different groups of files dragging the mouse and holding CTRL. This is standard Windows behavior, and it's finally added to all List Views.

Thursday, November 20, 2008

v7.80.0011 - 2008-11-20 21:04

  • +++ Time for revolution! For now it comes as a tweak only, but it might change your view of browsing the file system forever:
    Set to 1 to show only the tree paths you have actually used. Makes browsing blindingly fast, the tree ridiculously small, and you feel like the king of the harddisk. To make testing a bit easier for you I added a temporary scripting command:
      ::MiniTree 1; // turn MiniTree on
      ::MiniTree 0; // turn MiniTree off
    Note that this feature is in experimental BETA-state. There might be glitches... I tested it for local paths, special paths (Desktop...), and UNC paths (particularly interesting because of the incredible speed). All looking great so far.

v7.80.0010 - 2008-11-20 20:15

  • + Tweak to activate a hardcore version of "Auto-Optimize Tree":
    Set to 1 to optimize the tree on each location change.
  • + Menu Favorites | Special System Folders: Added "Program Files".
  • * Scripting | Step Dialog: Now, the stepped script lines are displayed with "; " at each line end. Looks more "scripty" and makes it easier to copy and paste them (using right-click menu).

Tuesday, November 18, 2008

v7.80.0009 - 2008-11-18 10:56

  • + New variable: <xyini> = current XYplorer INI file (without path).
  • + Rename Preview: Now you can tweak the color used for zebra striping the filename lists. The format is RRGGBB (as in HTML).
    For example, this will produce a light grey:
    If you do not use the tweak (set value to nothing) then the Grid color for Browse mode is used by default.
  • * Scripting Math: Now the operator precedence is (*,/) > (+,-) meaning that * and / are of equal weight, and + and - are of equal weight. Processing is from left to right.
      ::echo 1 - 3 - 3;         // -5! (not 1)
      ::echo 5 - 2 + 1;         //  4! (not 2)
      ::echo 5 - 2 * 2 + 1;     //  2! (not 0)
      ::echo 32 / 4 / 3;        //  2.66! (not 24)
      ::echo 32 / 4 * 3;        //  24!   (not 2.66)
    The above expressions are processed like this:
      ::echo (1 - 3) - 3;       // -5! (not 1)
      ::echo (5 - 2) + 1;       //  4! (not 2)
      ::echo (5 - (2 * 2)) + 1; //  2! (not 0)
      ::echo (32 / 4) / 3;      //  2.66! (not 24)
      ::echo (32 / 4) * 3;      //  24!   (not 2.66)
  • ! Scripting: SC sortby did not work as expected on a dirty sort column (e.g. where a new item has been created but not yet sorted into position).
  • ! Scripting: SC incr did not work with global vars. Fixed.
  • * Quick Scripting: Now, when Quick Scripting is disabled, and you attempt to load a script prefixed with "::" you get a smart message like this:
      This location looks like a script:
      ::msg "Hi!"
      Press OK to process it as a script.
      Tip: Enable Quick Scripting in Configuration to skip this message!
  • * Info Panel | Properties: Time-Stamping boxes now preselect all when activated.

Monday, November 17, 2008

v7.80.0008 - 2008-11-17 12:42

Publication of this update was unfortunately skipped due to complex editing required. Doing now for documentation purposes. Sorry about that!

  • + Scripting got a new function.
      Name:   URLEncode
      Action: URL-encodes string.
      Syntax: urlencode(string, raw=0)
          0: URL-encode according to RFC 1738, except space => +
          1: URL-encode according to RFC 1738 (space => %20)
        ::echo urlencode("ä ö ü"); //%E4%20%F6%20%FC
        ::echo urlencode("ä ö ü", 1); //%E4+%F6+%FC
      POM Example:
        |"Search IMDB for '<curbase>'" *> _
          ::$a=URLEncode("<curbase>"); _
        // Mad Max => Mad+Max
  • + Scripting got a new function.
      Name:   URLDecode
      Action: Decodes URL-encoded string.
      Syntax: urldecode(string, raw=0)
          0: URL-decode according to RFC 1738, except + => space
             But it also converts %20 => space
          1: URL-decode according to RFC 1738 (%20 => space)
             It will NOT convert + => space
        ::echo urldecode("%E4%20%F6%20%FC"); //ä ö ü
        ::echo urldecode("%E4%20%F6%20%FC, 1"); //ä ö ü !
        ::echo urldecode("%E4+%F6+%FC"); //ä ö ü
        ::echo urldecode("%E4+%F6+%FC", 1); //ä+ö+ü !!!
  • + Scripting got a new function.
      Name:   md5
      Action: Calculate the md5 hash of a string.
      Syntax: md5(string)
        ::echo md5(""); //d41d8cd98f00b204e9800998ecf8427e
  • + Scripting: Now the captions of scripts in multi-script resources may contain XY variables. They are resolved in the moment the menu is popped up. For example, paste this into the Try Script box:
      "Go to <xypath>"
        goto <xypath>;
      "Is it <date hh:nn:ss>?"
        msg "It's <date hh:nn:ss>!";
    The 2nd script will show two different times if you wait longer than a second before you click the menu item.

Sunday, November 16, 2008

v7.80.0007 - 2008-11-16 15:13

  • + POM: Now the captions may contain XY variables. They are resolved in the moment the POM is generated. For example:
      "Search IMDB for '<curbase>'" *>::Open("http://www.imdb.com/ _
    Will show the caption "Search IMDB for 'Mad Max'" when the current file is "Mad Max.jpg".
    (Note that the line continuation using [space]_ as applied in the example above does not work in XY -- it's just done here for the change log!)
  • * SC delete: Now, any non-existing items passed in the [itemlist] argument will be simply ignored. No more error message.
  • ! Menu Go | History...: Error message when OK-ing the list without selecting an item. Fixed. Also, now the current history item is always preselected when opening the list.
  • ! Wrong icons in various List Management dialogs since v7.80.0006. Fixed.

Friday, November 14, 2008

v7.80.0006 - 2008-11-14 11:04

  • % History, Address Bar Dropdown, and various List Management dialogs now open much faster due to smarter icon handling.

Thursday, November 13, 2008

v7.80.0005 - 2008-11-13 09:09

  • * Configuration | General | Disallow dragging from tree and list: From now on, this setting only affects dragging with the *left* mouse button. The right button is always available for dragging.

Sunday, November 9, 2008

v7.80.0004 - 2008-11-09 21:47

  • * File Find | Follow Folder Links: Now there's a simple recursion blocker. If a folder link points to a location that again has a folder link, that 2nd folder link is not followed anymore.
  • * Statusbar: Tooltips were not Unicode compliant yet. Fixed.
  • ! Address Bar: Popping the dropdown's right click menu undropped the dropdown but kept the menu visible (v7.80.0000), or did not show the context menu at all (v7.80.0001). Fixed.
  • ! FVS: Fixed another glitch where the auto-default was used when it should not (when going from Search Results back to browse mode).
  • ! Info Panel | Preview: The little orange icon to open the options menu had lost it's mouseover effect recently. Fixed. It also shows the name of the previewed file now in a tooltip.
  • ! Info Panel: Did not show the version info of (*.exe, *.dll, etc. ...) files that had upper Unicode chars anywhere in the path. Also did not Raw View those files at all. Fixed.

Friday, November 7, 2008

v7.80.0001 - 2008-11-07 10:35

  • + Menu View | List Style: Added option "Hide extensions". Allows you to hide extensions in the file list on a per-tab basis (or hold SHIFT to set it for all tabs). You may assign a KS to it, and you can make certain folders hide their extensions via FVS.
  • - Tweak removed:
  • % Menu Go | History...: Opens faster.
  • * SC readfile: Now the filename argument defaults to the current file.
      ::readfile(); //opens current file
  • ! SC readfile: Error if file was empty. Fixed.

Thursday, November 6, 2008

v7.80.0000 - 2008-11-06 12:00

Main changes since last release:

  • +++ File Search: Now combines Boolean Logic with Regular Expression
  • +++ History per Tab: Optionally each tab maintains its own history.
  • +++ Scripting: Now there are global variables.
  • +++ File Search by Contents: Now supports pattern matching.
  • +++ Reporting: Now you have fully customizable one-click reports.

Wednesday, November 5, 2008

v7.70.0023 - 2008-11-05 15:58

  • * Updated the help file.
  • ! Fixed minor scripting glitches.

Tuesday, November 4, 2008

v7.70.0022 - 2008-11-04 13:12

  • * Catalog: Now, if you press F2 on an item that has no proper caption but shows its location or script data *as* caption, then the Properties dialog is opened rather than the inline rename box. This prevents you from unintentionally creating and modifying a caption when you think you are editing the actual data.
  • * SC Report(): Now, you can overwrite the default field separator through the template argument. Rule: If the template argument does not contain any opening curly brackets ( { ) (they are used to deliminate fields), then it is taken as new field separator. For example:
    - Use the default field separator TAB:
      ::text report();
    - Use ", " as field separator:
      ::text report(", ");
    - Use "{Name}. " as template:
      ::text report("{Name}. ");

v7.70.0021 - 2008-11-04 10:34

  • * SC load: Now you can pass "*" as labels to show all (hidden and visible) scripts in the resource. Example:
      ::load "test.xys", "*";
  • + Now you can opt to hide extensions from the filenames in the List. It's currently done as a tweak:
    Note that it's not recommended to hide extensions! Showing the filenames without extension is hiding super-important info from its natural place.
  • + Find Files: Now RegExp Search supports Boolean logic. v7.70.0020 allowed you to do this:
      :>.*test.* AND NOT >.*not.*test.*
    Now you can do the same search also like this (when mode "RegExp" is enabled in Find Files tab):
      ".*test.*" AND NOT ".*not.*test.*"
    Or like this (overwriting the mode setting in Find Files):
      >".*test.*" AND NOT ".*not.*test.*"
    The quotes make the difference here: If there's a double-quote anywhere in the expression it is interpreted as a Boolean RegExp. Note that, contrary to the first syntax, all patterns MUST be RegExp (resp. are interpreted as RegExp) with the second syntax -- you cannot mix RegExp with wildcard patterns. You do not have to quote all combined patterns, but it is recommended.
  • ! History per Tab: Fixed some glitches with locked tabs.
  • ! Scripting: Menu separators in script resources were hidden if they followed a hidden script. Fixed.

Monday, November 3, 2008

v7.70.0020 - 2008-11-03 13:00

  • +++ Boolean Search now supports Regular Expressions. Simply prefix
    your patterns with ">" to mark them as RegExp patterns.
    - Find all files containing "test" but not "not" before "test"
      anywhere in the name:
        :>.*test.* AND NOT >.*not.*test.*
    - Same as above, but combinig a non-RegExp with a RegExp:
      *test* AND NOT >.*not.*test.*
    - Find all *.doc files that have a date of format yyyy-[m]m-[d]d
      in the name:
        :>\\d{4}-\\d{1,2}-\\d{1,2} AND *.doc
      Note that the backslashes have to be escaped in the RegExp
      pattern \d{4}-\d{1,2}-\d{1,2}, as is generally the case for
      backslashes in *unquoted* XY Boolean search patterns. The
      alternative since today (see below!) is to quote the pattern
      (quoting *.doc is optional here):
        :>"\d{4}-\d{1,2}-\d{1,2}" AND "*.doc"
    - If the left-most pattern is RegExp you have to prefix ":" to
      the whole string else the auto-detection for single (non-
      Boolean) RegExp pattern sets in.
    - The RegExp-marker ">" must *precede* a quoted pattern!
      >"\d{4}-\d{1,2}-\d{1,2}" = OKAY
      ">\d{4}-\d{1,2}-\d{1,2}" = WRONG!
    - You can freely combine RegExp and non-RegExp patterns
  • * Search patterns: Now you can quote patterns (using double-quotes) to protect them from being parsed. This saves you escaping certain sequences with \ and makes the patterns more readable. For example, to search files that contain "(not a)" or " & M"
    anywhere in the name, you'd have to do this before:
      *\(not a\)* OR * \& M*
    Now you can do this:
      "*(not a)*" OR "* & M*"
    Note that you have to provide all wildcards in quoted patterns, since quoted patterns are not automatically supplied with surrounding asterisks and thus allow so-called "exact matches".
      "*test*" finds all items containing "test"
      test     (same as above)
      "test"   finds only items called exactly "test"!
  • ! Search: Did not work correctly with Unicode chars AND parentheses simultaneously in the search pattern. Fixed.
  • + SCs copyto and moveto enhanced: Now you can trigger Rich Copy/Move Operations directly from a script! This allows you to copy/move files together with parts of their folder structure in a fully controlled yet automatic way.
    Syntax: copyto location, [source], [rootpath]
            moveto location, [source], [rootpath]
      rootpath: Common root for the rich operation (source paths are
                recreated in the target location relative to rootpath).
                Slashed or unslashed makes no difference.
    - If a source file is not located under rootpath then its full
      path is recreated in the target location; colons (:) after drive
      letters and "\\" before UNC paths are removed to conform to
      filename syntax.
    - Creates "E:\Test\Download\New\Test.txt":
      ::copyto "E:\Test", "D:\Download\New\Test.txt", "D:\";
    - Creates "E:\Test\New\Test.txt":
      ::copyto "E:\Test", "D:\Download\New\Test.txt", "D:\Download";
    - Creates "E:\Test\D\Download\New\Test.txt" because the source
      file is not under the given rootpath "E:\":
      ::copyto "E:\Test", "D:\Download\New\Test.txt", "E:\";
    - Creates a copy of all selected files under "E:\Test" recreating
      their full source paths. Note that a dummy string "*" is passed
      as rootpath: it will never work as an actual rootpath, so all
      source paths are fully recreated.
      ::copyto "E:\Test", , "*";
  • * Rich Copy/Move operations: Before, Rich operations did not work for folders, just for files. Any folders in the source list were silently removed. This restriction has been dropped! This gives you more options and a little more responsibility: You have to take care that your sources do not contain each other (e.g. in Search Results, when you select a folder AND files contained in
    that folder) else you get lots of "Overwrite?" prompts during the copying.
  • * Scripting: Before, you could hide scripts in script files (hide them from being shown in popup menus) by beginning their caption with an underscore, or, if no caption present, by beginning their label with an underscore. Now, the caption became irrelevant here: You hide a script by beginning its label with an underscore. This way, you can explicitly show a "hidden" script by calling it by label and still have a meaningful caption.
  • * Configuration | General: Renamed "Show relative path in find results" to "Show relative path in search results".
  • ! SC report(): Field {Path} returned only the relative path when "Show relative path in search results" was enabled. Fixed. Now it returns always the absolute path.
  • * SC writefile(): On mode n (nothing) when the file existed the function popped an error message and returned 0. Now it pops no error and returns 2 in that case.
  • * SC writefile(): New return codes. The following values or OR-ed bitwise:
      0 = failed
      1 = data written
      2 = file existed
    Success codes depending on "on_exist" argument:
      "n"         AND file existed > 2
      "a"/"o"     AND file existed > 3
      "a"/"o"/"n" AND file created > 1
  • + Scripting commands enhanced:
      - setting, settingp
        New named argument "regexprenamesep"
          = set the following tweak
          RegExpRenameSep=" > "
          ::setting "RegExpRenameSep", ">>";
        As with all setting statements, the original state from before
        the script is automatically restored when the script is done.

Saturday, November 1, 2008

v7.70.0018 - 2008-11-01 17:15

  • + SC report(): Now, the field {Dir ...} may contain other fields (but not contain itself). For example, in
      ::text report("{Name} - {Dir -{Size B} ({Size FLEX})}");
    the {Dir ...} field will return:
      - for directories: -
      - for files:       {Size B} ({Size FLEX}) [resolved, of course]
      - for drives:      [nothing]
  • ! SC report(): Field {Fullname} was buggy with search results. Fixed.
  • ! SC report(): Field {Path} returned paths slashed. Fixed: For easier handling all paths in scripts are returned unslashed.
  • + Various list controls: Now there's a little right-click menu which allows you to copy the currently selected list item or all items (one per line, each line ends with CRLF (0x0d0a)).
  • + CKS Miscellaneous Tab Functions: Added command "Open Previous Tab". Opens the previously used tab.
  • ! FVS: Fixed a glitch where the auto-default was used when it should not.
  • ! Type-ahead find: Didn't take into account the time used to jump to a temporary new list position, which could lead XY to interpret the following keystroke as the beginning of a new word. Fixed.

Thursday, October 30, 2008

v7.70.0017 - 2008-10-30 13:09

  • * Menu Go | History: The submenu has been completely removed and replaced by a popup list. Reason: With a history of up to 256 entries a submenu is not the interface of choice anymore.
  • * List Management | History:
    - The "Editor Mode" had to be disabled because it cannot handle
      the additional data structures that are needed for HPT.
    - With HPT on, items pertaining to the current tab are displayed
      in bold.
    - Change order of display to latest-item-on-top, with reverse line
      numbering. The line numbers match the numbers you see in history
      popup menus.

Wednesday, October 29, 2008

v7.70.0016 - 2008-10-29 15:56

  • * History per Tab: Changes...
    - Now, history (per tab or global) popup menus will never contain
      more than 32 items at once.
    - When HPT is active, Back and Forward do NOT cycle anymore
      through the current tab's history, but show the old school
      behavior of halting when there is no more.
    - History now can hold up to 256 items. Before it was 64.
    - Toolbar back/forward buttons are now blue if HPT is on.
  • * Hotlist: Since the history got much larger, the Hotlist now is confined to the 32 latest/youngest history entries of global history.
  • * Moved an item to a better place:
    OLD: Menu View | Current Tab | Tab List...
    NEW: Menu Go | Tablist...
  • + Menu View | Current Tab: moved these commands
      Move Tab Left (Ctrl+Shift+Left)
      Move Tab Right (Ctrl+Shift+Right)
    to the "Miscellaneous" category of CKS, into the new section "Tab Functions".
    Reason: You would most likely access the functionality either by KS, or by dragging the tabs with the mouse. The space in this menu can be used better.
    For internal reasons I decided to give them a new Function ID, which is normally a forbidden thing to do. In this case, however, it could be justified because a bug was fixed by it: Their old default KS (Ctrl+Shift+Left)/(Ctrl+Shift+Right) had been non-customizable KS, so you could not remove them, nor could you
    actually use the keys for what they were meant originally (and whence they are non-customizable): group-select in 2-dimensional list views (Thumbs, List, Small Icons...).
    The commands' original IDs are now used by the functions that replaced them in their original menu position. See next...
  • + Menu View | Current Tab: Added commands
      Tab History...
      Tab Hotlist...
    Will do what you think they do. Even when HPT is off.
  • * Icon Overlays: The recent solution for refreshing icon overlays in non-current tree items lead to severe performance problems in some systems. A new way will be found, later.

Tuesday, October 28, 2008

v7.70.0012 - 2008-10-28 15:00

  • +++ Added History per Tab (HPT). To enable it check "History per tab" in Configuration General. In a nutshell, HPT means that Back and Forward move within each tab's individual history, as opposed to the global history over all tabs.
    If HPT is enabled then:
    - Back and Forward (TB buttons and KS) are confined to each tab's
      individual history.
    - Back and Forward will cycle through the current tab's history
      (contrary to global history, where the move halts at both ends).
      Seemed more natural to me. So, if there's more than one history
      item pertaining to the current tab, then both buttons (Back and
      Forward) are enabled, else none is enabled.
    - The Back and Forward buttons's "arrow dropdowns" will each show
      one whole cycle in the repective back or forward order.
    - In the all-history popup menu (triggered via right-click
      "Back"/"Forward" TB buttons, or via KS) those history items
      belonging to the current tab are shown bold.
    - If "History without duplicates" (Config General) is enabled
      then duplicates on different tabs are tolerated.
    - The per-tab-data are saved between sessions. They are even
      maintained and saved if you untick HPT. So you can enable it at
      any time and get the desired functionality right away.
    * History now can hold up to 64 items. Before it was 32.

Monday, October 27, 2008

v7.70.0010 - 2008-10-27 14:38

  • +++ Scripting: Now there are global variables.
    By default, all variables in XY scripting are local, i.e. they are not shared between called and calling scripts. In other words, whenever one script calls another script (e.g. using commands "sub" or "load"), a new local namespace is created by the called script and pushed on the stack.
    Generally, global variables are shared between scripts. However, the mechanism of "globalization" -- (almost) identical to the one used in PHP -- now added to scripting gives you maximum control over what is shared and where. It's implemented by means of a new command:
    Name: Global
    Action: Define one or more variables as global
    Syntax: global variable(s)
      variable: A single variable, or a comma-separated list of up to
        10 variables. If a variable has already been defined as global
        before, then the global command initializes it to its current
        global value, else it is initialized to an empty string.
      Here are 2 scripts where the first is calling the second:
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        $foo = 4; // set local value: new local var $foo is created
        msg $foo; // 4 (local)
        // now make $foo global
        // it's initialized to [empty] (assuming nothing created
        // a global $foo before with a different value, which is
        // possible when "script1" has been called by yet another
        // script that has declared $foo as global)
        global $foo;
        msg $foo; // [empty] (global)
        $foo = 8; // set global value
        msg $foo; // 8 (global)

        sub script2; // go down

        msg $foo; // 16 (global, as set in script2)
        msg $bar; // $bar (uninitialized, not a variable)
        // make $bar global
        // it's set to "tequila" (as previously set in script2)
        global $bar;
        msg $bar; // tequila

        msg $foo;  // $foo (uninitialized, not a variable)
        $foo = 15; // set local value: new local var $foo is created
        msg $foo;  // 15 (local)
        // now make $foo global
        // it's set to 8 (as previously set in script1)
        // also create a new global $bar
        global $foo, $bar;
        msg $foo;  // 8 (global)
        $foo = 16; // set global value
        $bar = "tequila"; // set global value
      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - You can have as many global vars as you like, but it be no more
      than 10 per "global" statement for internal reasons. IOW, add a
      new "global" line for each pack of 10 variables if you really
      need that many.
    - It's recommended that you reflect the global nature of a variable
      in the variable name, for example by prepending $g_ to global
      vars. It will make your code easier to read and maintain.
  • * Scripting Step Mode: Improved handling of binary data. There were some display glitches with binary file data, and unnecessary slowness. Now you can make a pretty fast copy of the current file, even if the file is not small and with step mode enabled, using e.g. this:
        readfile("<curname>", "b"), ,"b");
  • * Scripting Step Mode: Variables on stack are now displayed with up to 256 chars (rest cropped). Non-printable chars are displayed as ".".

Friday, October 24, 2008

v7.70.0007 - 2008-10-24 17:40

Publication of this update was unfortunately skipped due to very complex editing required and personal medical issues at that time. Doing now for compete documentation purposes. Sorry about the omission!

  • + Implemented the first "On Event Action" (OEA), but for now only as a tweak (still meditating about the interface).
    The event is "right-click on the list's white space", and you can currently choose between the following actions:
      0 = Popup the Edit menu (as has been before all the time)
      1 = Popup the Shell menu for the current folder
      2 = Do nothing
    Conc. option 0: Just to remind you, in Configuration Advanced, you currently have two checkboxes where you can specify which commands are shown in the Edit menu.
  • + Tree and List: Now, the shell context menu will show "extended verbs" when you hold SHIFT while right-clicking an item. What those "extended verbs" are depends on your system and software.
  • * SC writefile(): Now, the filename may be relative to the current path. For example, this line will generate a standard report of the current folder in the current folder:
      ::writefile("report.txt", report());
  • * SC WriteFile(): Changed the mode argument to better match
    ReadFile() (see below).
    Syntax: writefile(filename, data, [on_exist], [mode])
      t:  [default] text;
          auto-detects whether text can be written as ASCII or needs
          to be written as UNICODE
      ta: text ASCII (1 byte per char);
          wide chars (upper Unicode) are represented by "?"
      tu: text UNICODE (2 bytes per char);
          with LE BOM at file beginning
          LE BOM = Little Endian Byte Order Mark: 0xFFFE
      b:  binary: raw bytes
          each byte is internally stored as double-byte character
          with a zero big byte
          corresponds to mode "b" in ReadFile()
  • + Scripting got a new function.
      Name:     ReadFile
      Action:   Read data from file into string.
      Syntax:   readfile(filename, [mode])
      filename: file full path/name, or relative to current path mode:
        t: [default] text
           whether file is ASCII or UNICODE is auto-detected
        b: binary: raw bytes
           each byte is internally stored as double-byte character
           with a zero big byte
           corresponds to mode "b" in WriteFile()
        ::$a = readfile("test-in.txt");
          writefile("test-out.txt", $a);
          = Reads text from "test-in.txt" (ASCII or UNICODE) and writes
            it back to "test-out.txt" (ASCII or UNICODE).
        ::$a = readfile("test-in.txt");
          writefile("test-out-A.txt", $a, , "ta");
          = Reads text from "test-in.txt" (ASCII or UNICODE) and writes
            it back to "test-out-A.txt" in ASCII (1 byte per char).
        ::$a = readfile("test-in.txt");
          writefile("test-out-U.txt", $a, , "tu");
          = Reads text from "test-in.txt" (ASCII or UNICODE) and writes
            it back to "test-out-U.txt" in UNICODE (2 bytes per char).
    You can actually use ReadFile() and WriteFile() for file copying
    on a low level (bypassing the Shell):
      ::writefile("test-out.txt", readfile("test-in.txt"));
        = Copy "test-in.txt" to "test-out.txt" (text file).
      ::writefile("xy-out.png", readfile("xy.png", "b"), , "b");
        = Copy "xy.png" to "xy-out.png" (any file, binary or text).
  • * SC report(): Changed handling of line feeds.
    - Now, if the template is omitted, each line is terminated with
      a line feed (0x0D0A). Before, the last line was excluded from
    - Now, if you use a template, *you* are responsible for adding any
      line feed at the end of each line if you want to have one.
      Before, this was done automatically for all non-last lines.
      To add the standard Windows line feed (0x0D0A) you can use
      the internal variable <crlf>, or alternatively the functions
      chr(13) and/or chr(10).
  • ! It could happen (under quite rare circumstances) that Auto-Refresh was magically suspended. Fixed.
  • + Rename Special | Batch Rename: Since long, the self-referential wildcard (*) is replaced by the original file base (file title excluding extension). Now, there's a 2nd self-referential wildcard (?) that stands for the original file extension.
       Old    Pattern             New
      a.jpg ?                    jpg.jpg
      a.jpg *.?.bak /e           a.jpg.bak
      a.jpg ?-<#001>             jpg-001.jpg
      a.jpg *.?.<date yymmdd>    a.jpg.081023.jpg
      a.jpg *.?.<date yymmdd> /e a.jpg.081023
  • * Dialogs User | Manage Commands and Edit Copy/Move/Backup To... are now centered in screen. Before they were centered in the main window.

Tuesday, October 21, 2008

v7.70.0004 - 2008-10-21 14:41

  • + Scripting got a new function.
      Name:   WriteFile
      Action: Write data to file.
      Syntax: writefile(filename, data, [on_exist], [mode])
        filename: file full path/name;
                  will be created if does not exist yet
        data:     string data to write
          o: [default] create new file/if existing: overwrite
          a: create new file/if existing: append
          n: create new file/if existing: do nothing
          t: [default] text ASCII (1 byte per char);
             wide chars (upper Unicode) are represented by "?"
          u: utf16: 2 bytes per char; with LE BOM at file beginning
             LE BOM = Little Endian Byte Order Mark: 0xFFFE
          b: binary: raw bytes (also 2 bytes per char, but no BOM)
        return: 1 on success, 0 on failure
        ::$a = writefile("C:\Temp\test_A.txt", "text");
          Creates a 4 byte file.
        ::$a = writefile("C:\Temp\test_A2.txt", "text ".chr(20000));
          Creates a 6 byte file.
        ::$a = writefile("C:\Temp\test-U.txt", "text ".chr(20000), ,"u");
          Creates a 14 byte file (2 bytes BOM + 2 * 6).

    Note: WriteFile() is implemented as a function (instead of a statement) because the return value will be useful once If/Then blocks are implemented. You may, however, call functions without using a dummy variable. See here below.
  • + Scripting: Now you may call functions without caring for the return. For example,
      ::writefile("C:\Temp\test_A.txt", "text");
    instead of
      ::$success = writefile("C:\Temp\test_A.txt", "text");
    Internally, the dummy statement "call" is prepended:
      ::call writefile("C:\Temp\test_A.txt", "text");
    In step mode you will see the return of writefile() as argument of
  • + Scripting: Comparisons now support the Like (LikeI) operator.
    General form:
      String Like Pattern (case-sensitive)
      String LikeI Pattern (case-insensitive)
    Where string is any string expression and Pattern may contain the usual wildcards and special chars used in XY patterns (*?#[]).
      ::echo "abc" Like "a*"; //1
      ::echo "Abc" Like "a*"; //0!
      ::echo "Abc" LikeI "a*"; //1!
      ::echo "It's " . (<date> Like "20??"?:"not ") .
        "the 21st century";

    Note that capitalization matters: "LIKE" or "Likei" won't work.
  • * File List: From now on, "Rename On Slow Double-Click" (menu View List Style) will only happen when no other than the clicked item is selected. This is a wonderful and relaxing detour from the Windows Explorer standard where clicking on any out of a bunch of selected files will enter rename mode -- did you really ever want this to happen??

Monday, October 20, 2008

v7.70.0003 - 2008-10-20 10:09

  • +++ File Find Contents: Now pattern matching is supported! This means you may enter wildcards * and ? in your content definition.
    - Since larger files are read chunkwise (performance!) there are
      certain limits to the scope of your pattern:
      A pattern "a*b" is guaranteed to be found if "a" and "b" are
      within a range of 1,024 bytes! It also *might* be found if "a"
      and "b" are within a range of 1,001 to 32,768 bytes! It will
      certainly not be found if "a" and "b" are only within an even
      larger range.
    - Just like with non-wildcard searches it is assumed that you look
      for a match anywhere within the file, so asterisks (*) are
      silently added to your pattern at both ends in case they are
      missing. This is just to spare you typing too many asterisks. So
      you may simply enter "D?g" to look for "D?g" anywhere in the file
      (match file contents with "*D?g*").
  • + Now you can define the default start location for a new tab. It's currently done as a tweak, but I'm ready to raise it to the GUI level if demand is there. For example:
    Leave empty to use the location of the current tab.
  • ! SC Report(): Returned rubbish if Line Numbers column was invisible. Fixed.

Friday, October 17, 2008

v7.70.0001 - 2008-10-17 12:28

  • * Icon Overlays: Now they are only retrieved for local locations, not for network locations. Reason: Retrieving icons slows down network browsing even if there are no overlays to be found, and the latter is quite likely the case. If you do need Icon Overlays on network locations you can use the following new tweak:
  • ! Menu File: The various "Copy Here with Suffix [...]" commands did treat folders with dots in the name as having extensions and inserted the suffix before the dot. Fixed.
  • ! XY variables and did not work as expected. Fixed.

Wednesday, October 15, 2008

v7.70.0000 - 2008-10-15 10:24

Main changes since last release:

  • +++ New Address Bar Deluxe with icons and optimized usability.
  • +++ Color Filters 2.0: Now you can define the *backcolor* of items.
  • +++ Unicode support is now complete for all parts of the application.
  • +++ Speed: Browsing folders and finding files got faster again.
  • +++ Scripting: Now with math, logic, and functions.

Sunday, October 12, 2008

v7.60.0052 - 2008-10-12 18:08

  • ! File List: Since v7.60.0025 - 2008-09-22 22:00 any current item (= item shown on Info Panel) lost its status of being current after a list refresh (F5, or by Auto-Refresh) under certain conditions. Fixed.
  • ! Rename Special | Set Extension: Prompted for a new extension when user passed an empty extension via UDC or scripting. Fixed: Now it just removes any current extension.
  • ! Rename Special | Set Extension: When an empty extension was applied to a file without any extension, the whole filename was attempted to be removed. Fixed: Now files without any extension remain untouched when you attempt to remove any extension.
  • ! Address Bar: With droplist visible the Browsing Tabs could steal away the mouse input capture with the unwanted effect that you could "click through" the list to the tabs below it. Fixed.

Saturday, October 11, 2008

v7.60.0051 - 2008-10-11 19:03

  • * SC confirm(): Now the optional linebreaker is set to "<br>" by default.
      Syntax: confirm(text, [linebreaker="<br>"])
  • ! Calling XY from Run using the line "XYplorer /ini=%tmp%\" did work alright, but the App Data Folder was not reachable because Windows (at least XP) Run converts %tmp% into an DOS 8.3 formatted path (!) which was not expected at that point by XYplorer. Fixed. Now the passed app data path is internally converted to the long file name format before processing it further.
  • ! Rename Special RegExp Rename: It was possible to create new filenames that appeared to have trailing spaces (the list showed them as such), using a pattern like "\.html$ > " (without the quotes). Fixed.
  • * Rename Special Set Extensions: Now you can remove an extension by leaving the input box empty.
  • * Rename Special: Renamed command "Aaa Aa.aaa" (sets the file base to title case, converting any letters within the words to lower case) to "Aaa Aa.*" because the extension is actually left untouched.
  • + Rename Special: Added command "A* A*.*". It sets the file base to title case, but leaves any upper case letters within the words untouched. The extension is completely left untouched.
      XYplorer_work.ini ->
                 A* A*.*: XYplorer_Work.ini
                Aaa Aa.*: Xyplorer_Work.ini
              aaa aa.aaa: xyplorer_work.ini
                   *.aaa: XYplorer_Work.ini
                   *.AAA: XYplorer_Work.INI

Friday, October 10, 2008

v7.60.0050 - 2008-10-10 11:48

  • * List Management: When dragging an item to a new position, pressing ESC will now abort the dragging operation but leave the dialog open. Before, it closed the dialog.
  • ! Configuration | Interface Colors | Beveled border: Catalog showed doubled border if checked. Fixed.
  • * File List, Win2K only: Worked around a Win2K bug where the Type of unregistered extensions was set to an empty string instead of "EXT File".

Thursday, October 9, 2008

v7.60.0049 - 2008-10-09 10:43

  • ! With "Resort list immediately after rename" active, the list should NOT be immediately resorted when the rename was done either using TAB (serial rename) or by clicking outside the rename box or other ways to steal the focus from the rename box (where an immediate resort would be perceived as confusing or disturbing). This worked so far, but the list was actually resorted when the
    name of the file to be renamed was not changed. So there was an unwanted exception from the exception. Fixed.
  • ! Problems when exiting app using quick script (e.g. #191; or #192;) in Address Bar. Fixed.
  • ! Rename Preview: Drawing glitch on last line. Fixed.
  • ! Tree: Possible delays in painting when scolling by wheel. Fixed.

Wednesday, October 8, 2008

v7.60.0047 - 2008-10-08 11:47

  • ! Edit controls: Due to a bug in Triple Click you could not remove the selection by a single click under certain conditions. Fixed.
  • * DropDowns: Now the selection in the dropdown list shows the standard coloring.
  • + Address Bar: Forgot to mention that click on icon selects all.

Tuesday, October 7, 2008

v7.60.0046 - 2008-10-07 12:55

  • + Edit controls: Now all Edit controls, including those of DropDown lists and multi-line boxes, support select-all-on-triple-click. The interval between the consecutive clicks must be <= DblClickTime. The SC "info" displays the current DblClickTime.
  • * DropDown/Address Bar: Droplist quits supporting the keys Home and End. They are now applied to the Edit box. It's better.
  • ! DropDowns: Match list was not positioned correctly when dropped upwards and list height changed. Fixed.
  • ! Address Bar: Horizontally mis-scrolled contents. Fixed.
  • ! Rename Special dialog: Ctrl+Enter to go to preview anymore. Fixed.
  • ! File List: When empty and in Details view, right-clicking the column headers would pop the white space context menu instead of the column headers context menu. Fixed.
  • + The FixFocusLoss tweak is back. Reason: It has a side-effect (XYplorer appears two times in the Application tab of Windows Task Manager) that's completely harmless but might disturb an innocent user.
    Set FixFocusLoss to 1 to fix the focus loss of modal popups on taskbar activation (but live with the above mentioned side-effect).
  • * The last UserControl has been removed. The long work of removing those creatures from the code is finally completed!

Saturday, October 4, 2008

v7.60.0041 - 2008-10-04 10:07

  • * Tree and List: Rename boxes now recognize the following chars as word breaker (dbl-click selection, moving cursor with CTRL):
    .:,; _-~(){}[]<>/\^°*?!§$%&=+#"'
    Note that illegal filename chars are contained. This is because the routine will later be probably applied to other rename boxes as well which may contain such chars.
  • ! List: You could fool the list control into drawing header buttons in non-Details views. Fixed.
  • ! Scripting: "+" and "-" were misinterpreted as numeric strings, so
      msg ("+" == "-");
    returned 1 (true, because +0 == -0) instead of 0 (false). Fixed.

Thursday, October 2, 2008

v7.60.0040 - 2008-10-02 11:18

  • % Address Bar: retrieving list icons should work faster now, so the list should drop down faster.
  • * Address Bar: Changed the shoot conditions.
      - If droplist is visible:
        Enter:              Undrop the list, and shoot.
        Ctrl+Enter:         Just undrop the list.
        Click on list:      Set the edit box to clicked item, undrop
                            the list, and shoot.
        Ctrl+Click on list: Set the edit box to clicked item, and undrop
                            the list.
        Click on edit box:  Just undrop the list.
        Esc:                Undrop the list, reset edit box to last
                            shot item.
      - If droplist is not visible
        Arrow Down or Up:   Open MRU list
        Ctrl+Down or Up:    Open Match List (= the parts of the MRU list
            that match the current item in edit box, sorted ascending).
            If the edit box is empty the whole MRU list is shown as
            Match List, i.e. sorted alphabetically.
        Esc:                Reset edit box to last shot item.
  • ! Address Bar: Automatic word breaking (dbl-click selection, moving cursor with CTRL) did not work okay when "Auto-complete path/file names" was on. Fixed.
  • + Tree and List: Rename boxes now recognize "." as word breaker (dbl-click selection, moving cursor with CTRL).

Wednesday, October 1, 2008

v7.60.0039 - 2008-10-01 17:57

  • ! Address Bar: Fixed a couple of glitches.

v7.60.0038 - 2008-10-01 15:20

  • *** Address Bar: Finally, the new DropDown is implemented. The main
    improvements over the old Address Bar:
    - Full Unicode support.
    - Icons in Edit Box and List.
    - 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).
    - 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.
    - The droplist has a minimal width of 400 (can be made
      configurable later).
    - The droplist is higher: 12 instead of 8 items.
    - If the list is dropped then the first <enter> will close the
      list, the next <enter> will go to the location. Allows you to
      further edit the item by keyboard before shooting.
  • * Address Bar: The font is now the "general" font, and not the one shared by Tree, List, and Catalog. Hence the AB will not respond to changing the font via Ctrl+Wheel anymore. Reason: I did not like it anymore (did not look good with icons).
  • * Address Bar: Text not auto-selected anymore after , nor after mousedown-selecting it from the droplist, nor after focussing the edit box by mousedown. Reason: I did not like it anymore. Most of the times I would want to edit the text instead of fully replace it.
  • ! Some lists did not wheel since v7.60.0013 (2008-09-17). Fixed.

Tuesday, September 30, 2008

v7.60.0037 - 2008-09-30 15:30

  • ! DropDown: Error on closing app if no items in Name / Location MRU list. Fixed.

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
  • ! Scripting: Did not work as expected:
      msg (1 == 1) ? ('$a is a variable') : 'uh?'; //$a is a variable
  • * Menu Go: Made some captions a bit more consistent and hopefully newbie-friendlier by means of redundancy:
      "Go to Application Path"
      "Go to Application Data"
      "Go to Script Files"
      "Go to Application Folder"
      "Go to Application Data Folder"
      "Go to Scripts Folder"