预设浏览器高级过滤
在视口选项中,有一个简单的多行编辑字段,标记为Filter String。这使高级用户可以通过测试标记和元数据来限制“预设浏览器”中显示的内容。该过滤器会影响缩略图浏览器或平面列表中当前可见的文件,并且可以设置为仅过滤文件,或同时过滤文件和目录。
过滤器的基本输入格式为:
(NOT class:attribute(options)={value}..{value}) COMBINER
您可以随意使用空格分隔的任意多个。
• Parentheses -您可以选择将多个测试括在括号中以进行分组。COMBINER确定相对于下一个测试如何处理此测试。
• NOT -可选的NOT前缀会反转以下测试。
• class -类是用户或共享的“固有”元数据之一,并确定从何处提取属性。
• attribute -要测试的属性的内部名称。属性区分大小写,并且相当随意(除了遵守内部字符串命名规则的事实外)。
内在类支持以下特殊属性:
• path :(文件路径)文件的完整本地路径。
• name :(字符串)路径的名称部分,包括扩展名。
• ext :(字符串)文件的扩展名(如果有)。
• size :(内存)磁盘上的文件大小。目录当前返回的大小为0。
• isFile :(布尔值)如果这是一个文件,则为true;否则为false。如果这是目录,则返回false。
• numFiles :(整数)目录中可识别的文件总数。
• numDirs :(整数)目录中子目录的总数。
• numChildren :(整数)目录中可识别的文件和子目录的总数。
• modTime :(字符串)此文件或目录的最后修改或创建时间(以较新的为准)。
普通用户和共享标记的一些示例包括:
• isFavorite :(布尔值)如果将此条目标记为收藏夹,则为true。
• starRating :(整数)0-5,表示用户分配的星级。
• 标签:(字符串)用户提供的用于标记目的的任意字符串。
• author :(字符串)文件的作者。
• 版权:(字符串)版权信息。
• desc :(字符串)文件说明。
标记是用户可扩展的,并且可以包含任意属性。
(选项)
这些是可选的,但如果存在,则必须在括号中并遵循属性名称。可用选项取决于数据类型。选项列表以空格分隔。对于字符串:
• 子字符串:在属性中搜索测试值作为子字符串。这是默认值。
• pattern:进行模式匹配。
• case:使比较区分大小写。默认值不区分大小写。
• 精确:字符串必须与测试值完全匹配。可以与大小写一起使用以执行区分大小写的比较。
操作员
运算符是标准的数学测试,尽管其行为因数据类型而有所不同。
• =(等于);该值必须完全匹配。与字符串一起使用时,这会进行模式匹配,子字符串搜索或完全匹配,具体取决于设置的选项。
• <(小于),>(大于),<=(小于或等于),> =(大于或等于);基本逻辑测试。
• 在数字类型上,这可以按预期工作。
• 在浮点数上,这与很小的阈值(ε)进行比较,因为出于技术原因您不能直接比较浮点数。
• 在字符串上,这会执行C函数strcmp(或区分大小写的版本,取决于是否设置了case选项)并测试结果。在将modTime属性与另一个时间进行比较以查找比该时间更早或更旧的文件时,这非常有用。
如果未提供运算符,则只要文件或目录上存在class:attribute,过滤器就会匹配。
如果文件或目录上不存在该属性,并且存在运算符(这意味着您不只是在进行存在性测试),则该测试将被视为失败,而与要测试的值无关。
值
要测试的值。必须使用以下方式之一包装它:
• 花括号{...}:该值字符串被解析为“原始”格式的值。
• 方括号:该值字符串被解析为“漂亮”的格式值。
• 小于/大于括号<...>:字符串形式为class:attribute path,表示要测试的另一个属性。该路径是可选的。如果存在,它是目录高速缓存中另一个文件或目录的完整本地路径;如果省略,则从当前条目中拉出该属性。
如果需要在搜索字符串中包含花括号,则可以将这些花括号嵌套。如果该字符串中的花括号不平衡,则必须使用` (反引号)。如果您必须搜索` (反引号),则需要与另一个转义符一起转义` (反引号)。例如, ``(两个反引号并排)。
针对不存在的属性进行测试
还需要注意的是,只有在属性实际存在于项目上时,才进行值测试。这意味着,如果您想检查所有具有isFavorite属性设置为false,您可以执行以下操作:
用户:isFavorite = {false}
它只会匹配先前被标记为“收藏夹”然后再次关闭的条目(因为将其关闭只是将属性重置为false;它没有将其从标记中删除)。因此,您需要为过滤器执行以下操作:
user:isFavorite = {false}或非user:isFavorite
如果isFavorite属性为false,或者isFavorite属性不存在。
范围测试
的.. (两个句点)语法可用于在上述值和第二个值之间进行范围测试。后面的第二个值.. 遵循与第一个值相同的格式规则。这仅适用于= (相等)运算符,因为它与其他任何运算符都没有意义。
比较数字时,来自class:attribute必须大于或等于第一个值且小于或等于第二个值。
比较字符串时,它们都针对class:attribute的价值strcmp( )。(对于不区分大小写的版本,如果设置了大小写,则将忽略其他字符串选项。)
对于那些不知道的人strcmp()返回一个字符串是“小于”(通常被认为是“先于排序顺序”)还是“大于”另一个字符串。的class:attribute值字符串必须测试大于或等于第一个值字符串,并且小于或等于第二个测试字符串。当使用intrinsic:modTime属性,可让您查看是否在两个时间范围之间创建了文件。
合路器
执行多项测试时, AND和OR组合器可用于确定它们是否必须全部匹配或仅某些必须匹配。AND是可选的,如果没有提供,则被推断。与括号结合使用时,此功能最为有用。
例如,如果在用户标记中设置了“收藏夹”标志,或者如果用户标记星际评级不存在,或者确实存在且小于1,则此匹配。
user:isFavorite = {true}并且(非user:starRating或user:starRating <{1})