SlyEdit is the second full-featured full screen editor for Synchronet, written by nightfox
in JavaScript. SlyEdit can run in one of two styles, to mimic the look & feel of IceEdit or DCT Edit, two popular BBS message editors from the 1990s. The style is specified by a command-line argument. SlyEdit also supports customization of options via a configuration file and colors via theme files.
SlyEdit will recognize the user's terminal size and set up the screen accordingly.
Thanks go out to all the sysops and users who have reported bugs, made suggestions, and helped test SlyEdit, including the following people:
SlyEdit is normally installed into the Synchronet exec
directory. Its configuration files are normally located in the ctrl
directory. See slyedit
for SCFG installation instructions for SlyEdit.
There is a menu-driven configuration script you can use to configure the options for SlyEdit. To use it, open a command prompt, change to your sbbs/exec directory, and run this command:
jsexec slyedcfg
Alternately, you can specify the .js filename extension if you want to:
jsexec slyedcfg.js
You can also edit the configuration file manually. The configuration file, SlyEdit.cfg (located in the ctrl
directory), is a regular text file. It is split up into 3 sections - Behavior, Ice colors, and DCT colors. These sections are designated by [BEHAVIOR], [ICE_COLORS], and [DCT_COLORS], respectively. Each setting has a name=value format. Comments can be added on their own line starting with a ; (semicolon) character. The settings for SlyEdit.cfg are described below:
Behavior settings
Setting | Description |
---|---|
displayEndInfoScreen | Whether or not to display the info screen when SlyEdit exits. Valid values are true and false. If this option is not specified, this feature will be enabled by default. |
userInputTimeout | Whether or not to use an input timeout for users. Valid values are true and false. Note: The input timeout is not used for sysops. If this option is not specified, this feature will be enabled by default. This option was added in version 1.08. |
inputTimeoutMS | The amount of time (in milliseconds) to use for the input timeout. If this option is not specified, this option will default to 300000. This option was added in version 1.08. |
reWrapQuoteLines | Whether or not to re-wrap quote lines. Valid values are true and false. This feature is enabled by default. With this feature enabled, SlyEdit will re-wrap quote lines to still be complete and readable after the quote prefix character is added to the front of the quote lines. SlyEdit is able to recognize quote lines beginning with > or 2 letters and a > (such as EO>). If this feature is disabled, quote lines will simply be trimmed to make room for the quote prefix character to be added to the front. This option was added in version 1.15, replacing the older option splitLongQuoteLines. |
allowColorSelection | Whether or not to let the user change the text color. This option was added in version 1.80. |
saveColorsAsANSI | Whether or not to save message color/attribute codes as ANSI (if not, they will be saved as Synchronet attribute codes). Normally, this should be false, since Synchronet does not word-wrap messages with ANSI codes and is able to convert Synchronet attribute codes to ANSI for other BBS systems as needed. This option was added in version 1.80. |
allowCrossPosting | Whether or not to allow cross-posting. Valid values are true and false. This setting is enabled by default. This option was added in version 1.20. |
enableTextReplacements | Whether or not to enable text replacements (AKA macros). Valid values are false (disabled), true (enabled with basic/literal text matching), and regex (enabled using regular expressions). |
enableTaglines | This serves as a default for user settings for whether or not to enable the option to add a tagline to their message upon saving the message. This option was added in version 1.32. |
tagLineFilename | This specifies the name of a text file where tag lines are stored. By default, it is SlyEdit_Taglines.txt. See the “Tagline configuration file” section for more details. This option was added in version 1.32. |
taglinePrefix | Some text to be added to the front of a tagline that is selected from the user. The intention of this setting is to differentiate taglines from the rest of the message. This defaults to the string “... ” (3 dots and a space). If desired, this can be set to a blank string (nothing after the = ) - for instance, if you only want to put double quotes around text lines, you could set this to blank and enable the quoteTagLines setting. This option was added in version 1.33. |
quoteTaglines | Whether or not to put selected taglines in double quotes. This defaults to false. If you like taglines to have double quotes and no prefix, you can set this to true and set taglinePrefix to a blank string (nothing after the = ). This option was added in version 1.33. |
shuffleTaglines | Whether or not to shuffle (randomize) the list of taglines displayed to the user for selection. This option was added in version 1.33. |
allowUserSettings | Whether or not to allow users to configure their user settings. Valid values are true and false. Defaults to true. This option was added in version 1.32. |
useQuoteLineInitials | Whether or not to prefix quoted message lines with the previous author's initials when replying to a message. Valid values are true and false. Defaults to true. This setting serves as the default for user settings, which each user can change for themselves. If this setting is disabled, SlyEdit will simply prefix the quoted lines with “ > ”, as was done in IceEdit, DCT Edit, and other message editors of the early-mid 1990s. This setting is enabled by default. |
indentQuoteLinesWithInitials | When prefixing quoted messages lines with the previous author's initials, this setting specifies whether or not to indent quoted lines with a space. Valid values are true and false. Defaults to true. This setting serves as the default for user settings, which each user can change for themselves. If not specified in SlyEdit.cfg, this setting is disabled by default. |
allowEditQuoteLines | Whether or not to allow the user to edit quote lines. Valid values are true and false. Defaults to true. This was added in version 1.52. |
allowSpellCheck | Whether or not the spell check feature is allowed. Valid values are true and false; it defaults to true if not specified. You might want to disable spell check if, for instance, the spell check feature causes an “out of memory” error on your system. This option was added in version 1.71. |
dictionaryFilenames | A comma-separated list of filenames for dictionaries, for the spell checker feature. The filenames are in the format dictionary_<language>.txt, where <language> is the language name. For dictionaryFilenames, you can also just specify the language names if you want. The dictionary filenames will be looked for in sbbs/mods, sbbs/ctrl, and then the directory where SlyEdit.js is located. Note that the dictionary files must be sorted for proper word matching, and the words in the dictionary must be all lower-case, since SlyEdit does case-insensitive matching via all lower-cased words. This was added in version 1.64. |
Ice color settings
Setting | Description |
---|---|
ThemeFilename | The name of the color theme file to use for Ice-style colors. If no theme file is specified, then default colors will be used. |
menuOptClassicColors | Whether or not to use the classic Ice-style menu option colors. Valid options are true and false. If this option is set to false, then new colors will be used for Ice-style menu options. If this is set to true, then the classic Ice-style menu option colors will be used. Note that if this is set to false, the color setting SelectedOptionTextColor won't be used. This setting was added in version 1.34. |
DCT color settings
Setting | Description |
---|---|
ThemeFilename | The name of the color theme file to use for DCT-style colors. If no theme file is specified, then default colors will be used. |
The color theme configuration files (located in the ctrl
directory) are regular text files. Each setting has a name=value format. Comments can be added on their own line starting with a ; (semicolon) character. The color settings use Synchronet's ctrl-a_codes
.
The color theme files are plain text files that can be edited with a text editor. For each color setting, you can specify color attribute characters as specified in the Synchronet documentation for ctrl-a_codes
. Note that you don't need control (Ctrl-A) characters for the color settings; just the attribute characters (As of SlyEdit 1.81 (2022-11-26)). A couple examples of specifying colors:
High green: gh
Normal cyan: c
The following are the default Ice-style theme files included with SlyEdit:
SlyIceColors_BlueIce.cfg (based on the original IceEdit theme) SlyIceColors_EmeraldCity.cfg (based on the original IceEdit theme) SlyIceColors_FieryInferno.cfg (based on the original IceEdit theme) SlyIceColors_Fire-N-Ice.cfg (based on the original IceEdit theme) SlyIceColors_GenericBlue.cfg (based on the original IceEdit theme) SlyIceColors_ShadesOfGrey.cfg (based on the original IceEdit theme) SlyIceColors_PurpleHaze.cfg (an original SlyEdit theme)
The following are the default DCT-style theme files included with SlyEdit:
SlyDCTColors_Default.cfg (based on the original DCT Edit theme) SlyDCTColors_Midnight.cfg (based on the original DCT Edit theme)
The color settings are listed below:
Ice-style Color Theme Settings
Setting | Description |
---|---|
QuoteLineColor | The color for quoted lines in the message |
BorderColor1 | The first color to use for borders (for alternating border colors) |
BorderColor2 | The other color to use for borders (for alternating border colors) |
KeyInfoLabelColor | The color to use for key information labels (displayed on the bottom border) |
TopInfoBkgColor | The color to use for the background in the informational area at the top |
TopLabelColor | The color to use for informational labels in the informational area at the top |
TopLabelColonColor | The color to use for the colons (:) in the informational area at the top |
TopToColor | The color to use for the “To” name in the informational area at the top |
TopFromColor | The color to use for the “From” name in the informational area at the top |
TopSubjectColor | The color to use for the subject in the informational area at the top |
TopTimeColor | The color to use for the time left in the informational area at the top |
TopTimeLeftColor | The color to use for the time left in the informational area at the top |
EditMode | The color to use for the edit mode text |
QuoteWinText | The color for non-highlighted text in the quote window |
QuoteLineHighlightColor | The color for highlighted text in the quote window |
QuoteWinBorderTextColor | The color for the quote window borders |
SelectedOptionBorderColor | The color to use for the borders around text for selected multi-choice options |
SelectedOptionTextColor | The color to use for the text for selected multi-choice options |
UnselectedOptionBorderColor | The color to use for the borders around text for unselected multi-choice options |
UnselectedOptionTextColor | The color to use for the text for unselected multi-choice options |
DCT-style Color Theme Settings
Setting | Description |
---|---|
QuoteLineColor | The color for quoted lines in the message |
TopBorderColor1 | The first color to use for the top borders (for alternating border colors) |
TopBorderColor2 | The other color to use for the top borders (for alternating border colors) |
EditAreaBorderColor1 | The first color to use for the edit area borders (for alternating border colors) |
EditAreaBorderColor2 | The other color to use for the edit area borders (for alternating border colors) |
EditModeBrackets | The color to use for the square brackets around the edit mode text that appears in the bottom border (the [ and ] around the “INS”/“OVR”) |
EditMode | The color to use for the edit mode text |
TopLabelColor | The color to use for the informational labels in the informational area at the top |
TopLabelColonColor | The color to use for the colons (:) in the informational area at the top |
TopFromColor | The color to use for the “From” name in the informational area at the top |
TopFromFillColor | The color to use for the filler dots in the “From” name in the informational area at the top |
TopToColor | The color to use for the “To” name in the informational area at the top |
TopToFillColor | The color to use for the filler dots in the “To” name in the informational area at the top |
TopSubjColor | The color to use for the subject in the informational area at the top |
TopSubjFillColor | The color to use for the filler dots in the subject in the informational area at the top |
TopAreaColor | The color to use for the “Area” text in the informational area at the top |
TopAreaFillColor | The color to use for the filler dots in the “Area” field in the informational area at the top |
TopTimeColor | The color to use for the “Time” text in the informational area at the top |
TopTimeFillColor | The color to use for the filler dots in the “Time” field in the informational area at the top |
TopTimeLeftColor | The color to use for the “Time left” text in the informational area at the top |
TopTimeLeftFillColor | The color to use for the filler dots in the “Time left” field in the informational area at the top |
TopInfoBracketColor | The color to use for the square brackets in the informational area at the top |
QuoteWinText | The color for non-highlighted text in the quote window |
QuoteLineHighlightColor | The color for highlighted text in the quote window |
QuoteWinBorderTextColor | The color to use for the text in the quote window borders |
QuoteWinBorderColor | The color to use for the quote window borders |
BottomHelpBrackets | The color to use for the brackets displayed in the line of help text at the bottom |
BottomHelpKeys | The color to use for the key names written in the line of help text at the bottom |
BottomHelpFill | The color to use for the filler dots in the line of help text at the bottom |
BottomHelpKeyDesc | The color to use for the key descriptions in the line of help text at the bottom |
TextBoxBorder | The color to use for text box borders (i.e., the abort confirmation prompt) |
TextBoxBorderText | The color to use for text in the borders of text boxes (i.e., the abort confirmation prompt) |
TextBoxInnerText | The color to use for text inside text boxes |
YesNoBoxBrackets | The color to use for the square brackets used for yes/no confirmation prompt boxes |
YesNoBoxYesNoText | The color to use for the actual “Yes”/“No” text in yes/no confirmation prompt boxes |
SelectedMenuLabelBorders | The color to use for the border characters for the labels of currently active drop-down menus |
SelectedMenuLabelText | The color to use for the text for the labels of currently active drop-down menus |
UnselectedMenuLabelText | The color to use for the text for the labels of inactive drop-down menus |
MenuBorders | The color to use for the drop-down menu borders |
MenuSelectedItems | The color to use for selected items on the drop-down menus |
MenuUnselectedItems | The color to use for unselected items on the drop-down menus |
MenuHotkeys | The color to use for the hotkey characters in the menu items on the drop-down menus |
Common colors (appearing in both Ice and DCT color theme files)
Setting | Description |
---|---|
listBoxBorder | The color to use for the borders of list boxes (such as the cross-post area selection box and text replacement list box). Prior to version 1.29, this option was called crossPostBorder. |
listBoxBorderText | The color to use for the text in the borders of list boxes (such as the cross-post area selection box and text replacement list box). Prior to version 1.29, this option was called crossPostBorderText. |
crossPostMsgAreaNum | The color to use for the message group/sub-board numbers in the cross-post area selection box. This option was added in version 1.20. |
crossPostMsgAreaNumHighlight | The color to use for the highlighted (lightbar) message group/sub-board numbers in the cross-post area selection box. This option was added in version 1.20. |
crossPostMsgAreaDesc | The color to use for the message group/sub-board descriptions in the cross-post area selection box. This option was added in version 1.20. |
crossPostMsgAreaDescHighlight | The color to use for the highlighted (lightbar) message group/sub-board descriptions in the cross-post area selection box. This option was added in version 1.20. |
crossPostChk | The color to use for the checkmarks for the enabled message sub-boards in the cross-post area selection box. This option was added in version 1.20. |
crossPostChkHighlight | The color to use for the highlighted (lightbar) checkmarks for the enabled message sub-boards in the cross-post area selection box. This option was added in version 1.20. |
crossPostMsgGrpMark | The color to use for the current message group marker character in the cross-post area selection box. This option was added in version 1.20. |
crossPostMsgGrpMarkHighlight | The color to use for the highlighted (lightbar) current message group marker character in the cross-post area selection box. This option was added in version 1.20. |
msgWillBePostedHdr | The color to use for the text “Your message will be posted into the following area(s)” text when exiting SlyEdit. This option was added in version 1.28. |
msgPostedGrpHdr | The color to use for the group name header when listing the message's posted message areas when exiting SlyEdit. This option was added in version 1.28. |
msgPostedSubBoardName | The color to use for the message sub-boards when listing the message's posted message areas when exiting SlyEdit. This option was added in version 1.28. |
msgPostedOriginalAreaText | The color to use for the text “(original message area)” when listing the message's posted message areas when exiting SlyEdit. This option was added in version 1.28. |
msgHasBeenSavedText | The color to use for the text “The message has been saved.” when exiting SlyEdit. This option was added in version 1.28. |
msgAbortedText | The color to use for the Message Aborted text when exiting SlyEdit. This option was added in version 1.28. |
emptyMsgNotSentText | The color to use for the Message Not Sent text when exiting SlyEdit. This option was added in version 1.28. |
genMsgErrorText | The color to use for general message error text when exiting SlyEdit. This option was added in version 1.28. |
listBoxItemText | The color to use for text appearing in list boxes (such as the list of text replacements and the list of tag lines) |
listBoxItemHighlight | The color to use for the currently selected item in list boxes (such as the list of text replacements and the list of tag lines). This option was added in version 1.32. |
These are the key bindings for SlyEdit:
Key | Description |
---|---|
Ctrl-Z | Save the message |
Ctrl-A | Abort the message |
Ctrl-Q | Quote the previous message (for use when replying to a message - Opens the quote line selection window) |
Ctrl-S | Change subject (supported with Synchronet 3.17c development builds from July 21, 2019 or newer) |
Ctrl-D | Delete a line |
Ctrl-K | Select/set text color |
Ctrl-G | Input graphic character |
Ctrl-L | Help screen: List command keys |
Ctrl-R | Spell checker |
Ctrl-C | Cross-post message area selection |
Ctrl-T | List the text replacements configured for SlyEdit |
Ctrl-U | Configure user settings |
Ctrl-W | Word/text search |
Ctrl-N | Find the next occurrence of text (text search) |
Ctrl-O | Import a text file from the BBS machine (sysop only) |
Ctrl-X | Export message to a file on the BBS machine (sysop only) |
ESC | Toggle command menu |
INS (Insert) or Ctrl-I | Toggle insert/overwrite mode |
Home | Move cursor to the beginning of the line |
End | Move cursor to the end of the line |
Arrow keys | Navigate (set cursor position) in the message |
PageUp | Move up one page in the message |
PageDown | Move down one page in the message |
Key | Description |
---|---|
Up arrow | Scroll up one line |
Down arrow | Scroll down one line |
Enter | Select & insert quote line into message |
HOME | Go to the first quote line on the current page |
END | Go to the last quote line on the current page |
PageUp | Page up |
PageDown | Page down |
F | Go to the first page of quote lines |
L | Go to the last page of quote lines |
Ctrl-Q or ESC | Close the quote line window (quit out of quote mode) |
Key | Description |
---|---|
Up arrow | Scroll up |
Down arrow | Scroll down |
HOME | Go to the first line on the current page |
END | Go to the last line on the current page |
PageUp | Previous page of message groups/sub-boards |
PageDown | Next page of message groups/sub-boards |
F | First page of message groups/sub-boards |
L | Last page of message groups/sub-boards |
Enter | List sub-boards in selected message group, or toggle message sub-board for cross-posting |
Number input | Specify the message group/sub-board number |
Ctrl-C or ESC | Quit out of sub-board selection (and close the box when in the message group list) |
? | Show cross-posting help |
Note: It takes a couple of seconds to recognize the ESC key, so when using the ESC key, there will be a noticeable delay before the action takes place.
The tagline configuration file (by default, SlyEdit_Taglines.txt) can be placed in one of the following directories (searched in this order):
- The mods
directory
- The ctrl
directory
- The same directory as SlyEdit's .js files
The tagline configuration file is a plain text file containing a list of taglines, one on each line. SlyEdit includes its own tagline file, but you are free to edit it or use another tagline file altogether. It is recommended that taglines are limited to 78 characters in order to fit in the tagline window in SlyEdit. Taglines of any length will be used; however, only the first 78 characters will appear in the tagline selection box in SlyEdit.
User also have the option to use a random tagline. Taglines more than 78 characters in length are thus still useful for that purpose.
SlyEdit also supports the following slash commands, to be used on a blank line by themselves (they are not case-sensitive):
Command | Description |
---|---|
/S | Save the message |
/A | Abort the message |
/Q | Quote the previous message (when replying) |
/C | Cross-post message area selection |
/T | List the text replacements configured for SlyEdit |
/U | Configure user settings |
/UPLOAD (or /UL) | Upload a message contained in a text file |
As of version 1.88b (2024-02-11), SlyEdit is able to accept UTF-8 character/text input.
If you use Digital Distortion Message Lister, you must update the message lister to version 1.36 or newer in order for it to work properly with SlyEdit 1.27. The reason is due to information that the message lister provides to SlyEdit. When replying to a message, SlyEdit is able to retrieve author initials when it quotes messages. Normally, SlyEdit gets the information it needs about messages directly from Synchronet, but when using the message lister, that information must be provided by the message lister, as the message lister can't change the information that Synchronet provides. Starting with version 1.36 of Digital Distortion Message Lister, the message lister always writes the message number to its drop file (rather than either the message offset or message number).
Version table:
SlyEdit | Digital Distortion message Lister |
---|---|
1.27+ | 1.36+ |
1.26 | 1.35 |
1.25 | 1.34 |
1.18 | 1.31 |
Since version 1.64, SlyEdit has a spell check feature. Spell check can be started by the user with the Ctrl-R hotkey, or by the Edit > Spell Checker option in the DCT-style ESC menu (only available when in DCT mode). For spell check, SlyEdit will check each word to see if it exists in the configured dictionary/dictionaries, and if not, it will prompt the user for a corrected version of the word. The sysop can configure one or multiple dictionaries in SlyEdit.cfg with the dictionaryFilenames option. Dictionary files need to be in the format dictionary_<languageName>.txt, where <languageName> is the name of the language. Also, ideally, the language names should follow standard language tags, as in “en-us” for English (US), etc. See these web pages for more information: https://en.wikipedia.org/wiki/Language_localisation http://www.lingoes.net/en/translator/langcode.htm Also, the dictionary filenames will be parsed and the language name will be used in the menu of dictionaries in the user options - The user is able to enable/disable the configured dictionaries for their own use for the spell checker.
For the dictionaryFilenames option in SlyEdit.cfg, you can specify a comma-separated list of dictionary filenames. The dictionary filenames are in the format dictionary_<languageName>.txt, where <language> is the language name. In this list, the filenames can be in that format, or just <languageName>.txt, or just <languageName>. You can leave the setting blank to use all dictionary files that exist on the system. Language names are meant to be in ISO standard language and localization tags - For example, en-US specifies English with spellings for the US. Also, for dictionaries with localized spellings, the filenames can have a “-supplemental” at the end of their name before the extension if they only contain words that are unique to a particular region that don't exist for all regions. Also, dictionary filenames can just contain the language without a localization if they contain words common to all regions. For example:
Filename | Description |
---|---|
dictionary_en.txt | General English dictionary with spellings common to all regions |
dictionary_en-US-supplemental.txt | English word spellings only specific to the US |
dictionary_en-US.txt | Full English US dictionary |
SlyEdit will search for the dictionary files in the following directories, in this order:
Dictionary files must be sorted in order for word matching to work properly (SlyEdit uses a binary search for quick word matching, which requires the words to be sorted).