Synchronet v3.21e-Win32 (install) has been released (Mar-2026).

You can donate to the Synchronet project using PayPal.

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
user:boolean_search [2026/05/17 19:56] – Error-handling: use %%-escapes inside %...% so apostrophes stay literal and bullets render inline Claude.Aiuser:boolean_search [2026/05/17 19:59] (current) – Wrap quoted-syntax in %%-escapes; italicize prose UI labels; uniform ASCII straight quotes throughout Claude.Ai
Line 14: Line 14:
  
 ^ Where                              ^ Trigger ^ ^ Where                              ^ Trigger ^
-| Message base scan (main menu)      | ''F'' — "Find Text in Messages(''/F'' to scan all sub-boards) | +| Message base scan (main menu)      | ''F'' — //Find Text in Messages// (''/F'' to scan all sub-boards) | 
-| Reading messages on a sub          | ''F'' — "Find textre-prompt inside the read loop |+| Reading messages on a sub          | ''F'' — //Find text// re-prompt inside the read loop |
 | Private mail (//Reading E-mail// | ''/'' (slash) at the mail-read prompt | | Private mail (//Reading E-mail// | ''/'' (slash) at the mail-read prompt |
-| File listings (file menu)          | ''F'' — "Find Text in File Descriptions(''/F'' for all dirs) |+| File listings (file menu)          | ''F'' — //Find Text in File Descriptions// (''/F'' for all dirs) |
 | File pager (''P_SEEK'', less-style)| ''/'' (slash) while viewing a file, bulletin, or log — ''n'' for next | | File pager (''P_SEEK'', less-style)| ''/'' (slash) while viewing a file, bulletin, or log — ''n'' for next |
  
-Note: the file menu's ''S'' ("Search for Filename(s)") is a separate+Note: the file menu's ''S'' (//Search for Filename(s)//) is a separate
 wildcard-pattern filename match (''*.zip'', ''WILD*.EXE'', etc.) and does wildcard-pattern filename match (''*.zip'', ''WILD*.EXE'', etc.) and does
 //not// use the boolean parser. Sysops with [[custom:command_shell|custom shells]] //not// use the boolean parser. Sysops with [[custom:command_shell|custom shells]]
Line 55: Line 55:
 | ''1024x768 &! swim''                  | contains ''1024x768'' and not ''swim'' | | ''1024x768 &! swim''                  | contains ''1024x768'' and not ''swim'' |
 | ''(windows %%|%% dos) & modem !os/2'' | (''windows'' or ''dos'') and ''modem'', but not ''os/2'' | | ''(windows %%|%% dos) & modem !os/2'' | (''windows'' or ''dos'') and ''modem'', but not ''os/2'' |
-| ''"TEST"''                            | the **word** ''TEST'' (won't match ''TESTING'' or ''BACKTEST'') | +| ''%%"TEST"%%''                            | the **word** ''TEST'' (won't match ''TESTING'' or ''BACKTEST'') | 
-| ''"SMITH & JONES"''                   | the literal phrase ''SMITH & JONES'', including the ''&'' |+| ''%%"SMITH & JONES"%%''                   | the literal phrase ''SMITH & JONES'', including the ''&'' |
  
 ===== Syntax ===== ===== Syntax =====
Line 65: Line 65:
  
 A bare term is any run of characters that doesn't include an operator A bare term is any run of characters that doesn't include an operator
-character (''&'', ''%%|%%'', ''!'', ''('', '')'', ''"''). Embedded+character (''&'', ''%%|%%'', ''!'', ''('', '')'', ''%%"%%''). Embedded
 whitespace is part of the term — it does **not** mean implicit AND. So whitespace is part of the term — it does **not** mean implicit AND. So
 ''VGA monitor'' is one phrase that matches whenever ''VGA'' appears ''VGA monitor'' is one phrase that matches whenever ''VGA'' appears
Line 115: Line 115:
 </code> </code>
  
-"word characteris any letter, digit, or underscore. Everything else+//word character// is any letter, digit, or underscore. Everything else
 (spaces, punctuation, brackets, etc.) is a boundary. (spaces, punctuation, brackets, etc.) is a boundary.
  
 Quoted phrases preserve any internal whitespace and operator characters Quoted phrases preserve any internal whitespace and operator characters
 as literal content, with word-boundary checks applied to the outer ends as literal content, with word-boundary checks applied to the outer ends
-of the phrase. This is what makes ''"SMITH & JONES"'' searchable as a+of the phrase. This is what makes ''%%"SMITH & JONES"%%'' searchable as a
 literal phrase including the ''&''. literal phrase including the ''&''.
  
Line 136: Line 136:
  
 ^ You type     ^ Behavior ^ ^ You type     ^ Behavior ^
-| ''"WORD"''   | whole-word match — both edges bounded                   | +| ''%%"WORD"%%''   | whole-word match — both edges bounded                   | 
-| ''" WORD"''  | trailing edge bounded only                              | +| ''%%" WORD"%%''  | trailing edge bounded only                              | 
-| ''"WORD "''  | leading edge bounded only                               | +| ''%%"WORD "%%''  | leading edge bounded only                               | 
-| ''" WORD "'' | no boundary check — pure substring match                |+| ''%%" WORD "%%'' | no boundary check — pure substring match                |
  
-This is what lets you, for instance, search for ''"co"'' to match the +This is what lets you, for instance, search for ''%%"co"%%'' to match the 
-abbreviation ''co.'' but not ''cocoa'' or ''coffee'', while ''" co "''+abbreviation ''co.'' but not ''cocoa'' or ''coffee'', while ''%%" co "%%''
 still matches ''co'' anywhere including inside ''cocoa''. still matches ''co'' anywhere including inside ''cocoa''.
  
Line 163: Line 163:
 prompt (showing the inline help). Common reasons: prompt (showing the inline help). Common reasons:
  
-  * ''unterminated quoted string'' — a ''"'' opened a quoted phrase but no closing ''"'' was found+  * ''unterminated quoted string'' — a ''%%"%%'' opened a quoted phrase but no closing ''%%"%%'' was found
   * ''%%expected ')'%%'' — a ''('' opened a group but the matching '')'' is missing   * ''%%expected ')'%%'' — a ''('' opened a group but the matching '')'' is missing
   * ''expected search term'' — an operator was followed by another operator or end of input   * ''expected search term'' — an operator was followed by another operator or end of input
Line 177: Line 177:
   * **Standard precedence** (NOT > AND > OR) is used instead of //PCBoard//'s documented strict left-to-right, but the two only differ on hand-crafted examples that no published manual used. Add parentheses if you depend on a specific grouping.   * **Standard precedence** (NOT > AND > OR) is used instead of //PCBoard//'s documented strict left-to-right, but the two only differ on hand-crafted examples that no published manual used. Add parentheses if you depend on a specific grouping.
   * An implicit AND is inserted before ''!'' / ''NOT'' (as in //Wildcat!//'s ''(windows %%|%% DOS) & (modem %%|%% comm) !OS/2'' example). //PCBoard// required the ''&'' to be explicit; the implicit form is more permissive but never changes the meaning of an already-valid //PCBoard// query.   * An implicit AND is inserted before ''!'' / ''NOT'' (as in //Wildcat!//'s ''(windows %%|%% DOS) & (modem %%|%% comm) !OS/2'' example). //PCBoard// required the ''&'' to be explicit; the implicit form is more permissive but never changes the meaning of an already-valid //PCBoard// query.
-  * //PCBoard// treated ''(text)'' (parens around a single word with no operator inside) as a search for the literal string ''(text)'' — including the parens. Synchronet always treats ''(...)'' as grouping, so ''(text)'' is equivalent to ''text''. If you want to search for parens literally, quote them: ''"(text)"''.+  * //PCBoard// treated ''(text)'' (parens around a single word with no operator inside) as a search for the literal string ''(text)'' — including the parens. Synchronet always treats ''(...)'' as grouping, so ''(text)'' is equivalent to ''text''. If you want to search for parens literally, quote them: ''%%"(text)"%%''.
  
 ===== See Also ===== ===== See Also =====