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.