Lugaru Wolf

Download Epsilon 14 Beta 17

Epsilon 14 was released on 20 October 2020, but during the transiton period, its final beta version will remain available from this page. Epsilon 14 adds 64-bit executables, directory comparison, and many other features. Changes since Epsilon 13 are listed here. Changes since the first beta version are below. This beta version expires December 1 2020.

Read about moving your customizations from Epsilon 13 (or older) to the new version here. You can install each Windows beta on top of a previous one (no need to uninstall first). On other platforms each beta installs independently. Remove the previous one whenever you wish.

Epsilon 14 Beta 17 is available in these formats:

The above packages include full documentation in HTML, Info, and (for Windows versions) WinHelp formats. The manual is also available in PDF format.

Known Issues

Changes between Epsilon 13 and Epsilon 14 are listed separately. Bugs fixed are listed below following the list of enhancements.

New Since Beta 1

14 B15 Epsilon's goto_url script for locating an installed browser on Linux and FreeBSD now also tries the browser names chromium, google-chrome, and chrome. (As before, you can customize the browser choice by copying Epsilon's provided goto_url script into ~/.epsilon and modifying it to select whatever browser you prefer. See that file for details.)
14 B15 Epsilon for Windows now uses an Extended Validation Authenticode certificate to keep Microsoft Defender SmartScreen from issuing spurious warnings.
14 B13 Epsilon for Windows uses new display logic to address a Windows display scaling issue that could cause slightly wiggling text when extending a highlighted region. Epsilon for Windows now displays various Unicode zero-width, extra-wide, right-to-left, and similar characters differently in side-by-side windows, forcing each into a one-cell-wide box, but displays them as before (i.e. respecting their specified widths and combining properties) on screen lines that contain only a full-width window.
14 B13 The non-admin version of the Windows installer now has an option to install only Epsilon's files, without creating any shortcuts or making registry changes.
14 B13 On Unix-based platforms, Epsilon's setup script now creates a symbolic link for Epsilon named lugaru-epsilon, which may be helpful for users running the wavelet image compression software also named "epsilon".
14 B12 When Epsilon for Windows is dragged to a display with a different scaling factor, it adapts to the new size with less flashing.
14 B12 The Windows installer now tries to clean up stray uninstall entries that were left behind by early Epsilon 14 beta versions, corrects incorrect working dirrectories in shortcuts created by early Epsilon 14 beta installers, renames pinned taskbar icons to include the current version number, and repairs pinned taskbar icons created by dragging a desktop icon instead of pinning (by replacing references to sendeps.exe with ones to epsilon.exe). It also changes how it asks Explorer to refresh its taskbar icons after such changes, to keep Explorer from displaying incorrect icons.
14 B11 The <Up> and <Down> keys now work in the switch-buffers window.
14 B10 The write-file and copy-to-file commands now warn if the given file name exists even when it's a remote file (accessed via an scp: or ftp: URL). The warn-before-overwrite variable now understands the value 2 meaning "warn for local files only".
14 B10 If you use copy-to-file with a directory name, it's now interpreted as a file with the same basename in that directory, same as commands like write-file. Both commands now follow this rule for remote files too. And copy-to-file now displays the correct file name when it's given a remote file name.
14 B10 On macOS, Linux, and FreeBSD, Epsilon now comes with a shell script named get_unicode_core_x11_fonts that can download and install a set of fonts that include Unicode characters for various languages.
14 B10 The list-bookmarks command now uses a different background color in some cases to better match the background color of syntax-highlighted text.
14 B9 Epsilon for Windows now displays characters in the range 128-159 (plus character 255) that have a zero width in the current font using the notation M-^x, rather that using a hardwired list of which characters should get that treatment. To implement this, the set_character_property() primitive recognizes a new CPROP_DISP_WIDTH code to query the current font.
14 B9 On macOS, the beta 8 addition which let Epsilon's startup helper move the XQuartz window to the front and activate it under certain circumstances has been moved out of the startup helper and into Epsilon's windows_foreground() primitive. A new value for the server-raises-window variable may be used to disable this if necessary. Also, a bug that caused XQuartz to open a Terminal window was fixed.
14 B9 JavaScript indenting now handles function chaining better.
14 B9 Files with a .json extension now use the JavaScript flavor of C mode, and Epsilon now understands that .tsx indicates TypeScript.
14 B8 In TeX mode, Ctrl-clicking to sync with a previewer no longer interferes with Ctrl-dragging to copy text. And the mode now highlights matching parentheses.
14 B8 Syntax highlighting should be faster in certain cases because Epsilon now groups some requests to syntax highlighting functions in horizontal scrolling mode so they operate on bigger regions at once.
14 B8 Epsilon's macOS startup helper now tries a new method to bring Epsilon's window to the top and give it focus when using XQuartz and Epsilon is invoked from the command line. Its startup helper recognizes a new configuration setting "activate" to disable this if necessary.
14 B8 The message for picking an encoding when a buffer contains Unicode characters now shows the prompt that follows in the echo area.
14 B8 In C++ code, Epsilon now colors C++ "identifiers with special meaning" (override, final, import, and module) as keywords. A bug preventing alignas and thread_local from being colored as keywords was fixed too.
14 B8 Epsilon now parses C++ raw string literals like R"delim(...)delim" correctly.
14 B8 The mouse-select command now returns codes to its caller reporting on the specific type of mouse operation performed, so that other commands may call it to add functionality. A few mouse subroutines now do this also.
14 B7 The Windows installer is now available in a version that doesn't need admin privileges and installs just for the current user. It sets up the configure-epsilon command to likewise not request admin privileges. Both installer versions as well as configure-epsilon now remember the various selections you make and offer them as the default in future runs. They now avoid modifying any custom EPSPATH setting as long as it still contains the install directory. The installer now asks Explorer to refresh its shell icon cache, so it should now update the names of any pinned icons after an update.
14 B7 Epsilon for X11 can now remember and restore its window position. Add the line "Epsilon.recordPosition: 1" to your ~/.epsilon/Xcustomresources file to enable.
14 B7 TeX mode's jump-to-dvi command now handles PDF viewers as well as DVI, via the new jump-to-dvi-extension variable, it now understands mainfile declarations, and TeX mode's documentation now provides detailed instructions on using it with PDF viewers that support SyncTeX to sync TeX code with its output in a viewer in both directions. You can now use Ctrl-Left-click to run jump-to-dvi via the new tex-mouse-select command. And the variables compile-tex-cmd and compile-latex-cmd have updated defaults.
14 B7 NSIS mode now has context help via the new context-help-rule-nsis variable.
14 B6 Epsilon for macOS uses a new startup helper program so that the privacy system in macOS 10.15 Catalina operate properly when Epsilon runs under XQuartz, whether started from its icon or from a command line (but see the manual for full details). There's no longer a separate Epsilon for Terminal download, since the Epsilon app now simply runs as a terminal program when XQuartz is not installed. Epsilon for macOS now requires macOS 10.9 or later.
14 B6 The default color scheme in non-console environments, standard-gui, now uses dark brown instead of black for keywords in C mode and modes based on it, and for function names in Visual Basic mode. You can use Alt-x set-color to change the colors.
14 B6 Epsilon 14 now comes with a smaller Unicode data file that omits some converters for certain legacy East Asian and EBCDIC character sets (just as Epsilon 12 and 13 did), resulting in a smaller download. If you must edit files using such encodings, see this page.
14 B6 Epsilon for X11 will now read any custom X11 resource definitions you put in a file named ~/.epsilon/Xcustomresources.
14 B6 The draw-column-markers variable in Epsilon for Windows now allows defining up to 100 column markers.
14 B6 On macOS, Epsilon now starts each interactive subprocess shell as a login shell. This is needed because in macOS there often isn't any parent process shell running as a login shell (as there would be in other Unix-like operating systems), so login tasks like initializing the environment would not be performed otherwise.
14 B5 When Epsilon was using horizontal scrolling to display a buffer with syntax highlighting, extremely long lines could make display refreshes very slow. Redisplay should now be faster in cases like a multi-megabyte single-line file using syntax highlighting.
14 B4 Epsilon for macOS is now distributed in two package types. One requires XQuartz and triggers macOS 10.15 Catalina's privacy prompt the first time you try to access a private folder like Downloads, Documents, or Desktop. The other can run as either a Terminal version if XQuartz isn't installed, or an XQuartz version if it is, but neither can easily access such private folders. [Note: Package types were combined in beta 6.]
14 B4 Context help on Shift-F1 uses mode-specific variables that say how to provide help; one type opens a URL in a browser. Such definitions can now use new shorthands to search for results on a specific website, and optionally, go immediately to the best match. These shorthand codes use the new context-help-site-search and context-help-site-search-lucky variables. Many context help variable definitions were updated so now they should usually go directly to an appropriate page. Code in .m and .js files now uses specific rules instead of the generic C mode rule. The context-help-rule-objc variable was added for the former.
14 B4 When Epsilon for Windows interprets shell variables within file names, it now recognizes "Documents" as a synonym for the internal Windows shell folder name "Personal". Both refer to the current user's Documents directory.
14 B4 Setting the epsilon-manual-port variable to zero redirects requests for Epsilon's manual in HTML form to the Lugaru website, instead of a local help server. But now Epsilon selects the correct version of the manual, based on its own version number, instead of using the most recent non-beta manual version. The value of -1 now means to use the most recent non-beta version of the manual (in case a version-specific manual is unavailable). The HTML manual now includes its version number on every page.
14 B4 Epsilon for Windows now moves and resizes itself at startup if needed to ensure it's visible on at least one monitor. The new -vf flag controls the details.
14 B4 The Windows-style find/replace dialog in Epsilon for Windows now remembers its previous position relative to Epsilon's main window.
14 B4 Epsilon for macOS now has a new icon (matching its Windows icon) with higher resolution.
14 B4 Epsilon's concurrent process startup script now creates the appropriate settings for zsh (which is now the default shell in macOS as of version 10.15 Catalina).
14 B4 Reading a file into a process buffer now sets its type point to the end, to keep Epsilon from unexpectedly executing the file contents.
14 B4 The EEL subroutine parse_url() now returns 1 ("valid") for a URL with only a service name, like http://, but no host name. Callers can reject those by checking if the host name it fills in is empty.
14 B3 Epsilon now completes on environment variable names in the process buffer. The process-completion-style variable has a new bit 16 which can be set to disable this.
14 B3 Tagging and displaying the current function's name work better with C++ template syntax. C, C++, and Java keywords added in more recent versions of those languages are now colored as keywords.
14 B3 Epsilon now tries to set the buffer directory of ssh and telnet buffers to a suitable scp or ftp URL, so that commands like find-file will prompt with a more useful default path. The new net-prompt-get-directory and net-prompt-pattern variables control this.
14 B3 The 64-bit version of Epsilon for macOS is now code-signed, and now requires macOS 10.9 or later. This required rearranging the file structure inside Epsilon's app bundle, and as a result, Epsilon's default search path for its files has changed on macOS.
14 B3 EEL's -v flag is more verbose about which specific files it's reading.
14 B3 Epsilon now recognizes that it should use shell mode for more types of files.
14 B3 The mouse now uses a pointer cursor for menus on non-Windows systems, and supports a few more cursor types.
14 B3 EEL programmers can use the new count_matches_in_buffer() subroutine.The concur_shell() primitive has a new flag for disabling its current-directory extraction feature.
14 B2 At file prompts, in addition to using environment variables, there are now shorthands for Windows shell folders and Epsilon's customization directory. Plus you can now define your own custom file and directory shorthands in a file. The file-interpret-env-vars variable has a new default and more bits defined, and the get_complete_environment() primitive, renamed get_substitution_variables(), now takes a flag argument.
14 B2 Epsilon can now search a file's hierarchy for .epsilon_vars files (see use-file-variables's new 16 bit to enable), and its syntax for file variable settings now permits (very simple) expressions, so you can (for example) set one indenting variable to be a multiple of another.
14 B2 The new file-variables-search-limit lets you set how close a "Local Variables:" line must be to the end of the file for Epsilon to recognize it. By default it must be within 3000 characters.
14 B2 The new grep-ignore-file-max-size variable limits the size of files grep will read to 2 GB.
14 B2 Epsilon's Linux packages now install by default to /opt instead of /usr/local. Epsilon's default search path now includes both locations.
14 B2 The Linux setup script now installs an updated Epsilon icon in various sizes into window manager menus.

Bug Fixes Since Beta 1

14.00 The shell() primitive under Unix no longer duplicates the process's output on the terminal when told to capture output.
14.00 The 64-bit version of Epsilon's edit-variables command no longer displays a list of variables using the help system, even if WinHelp is selected as the help system, but displays its own list (as it does when using HTML-based help, the default).
14 B17 Epsilon for Windows could save and restore its window to the wrong location after use of certain system key sequences like Windows-Left to snap its window to a fraction of the screen.
14 B17 A long-standing bug in extended file patterns was fixed. When a pattern used commas or curly braces along with the ** syntax to match hierarchies, and Epsilon encountered a symbolic link (or, for Windows, a junction or mount point) while expanding **, it would only follow the symbolic link for the first of the alternatives indicated by the comma or curly braces.
14 B16 A regression in beta 15 involving drive handling under Windows was fixed.
14 B16 Epsilon for Windows didn't restore to the correct position if the Windows taskbar was moved to the top or left side of the screen.
14 B15 Epsilon for Windows aborted and exited when trying to start a process if the current buffer's file name referred to an invalid drive, due to a library issue. Epsilon now tries to keep such library issues from forcing it to exit.
14 B14 A regression in beta 13 that made Epsilon for Windows crash when its main window was maximized during command execution was fixed.
14 B14 Under Ubuntu 18, Epsilon was not changing its text cursor to the focused state when receiving focus after a Gnome program exited.
14 B14 Epsilon for Windows now handles being dragged to a monitor with a different display scaling factor in a slightly different way.
14 B13 On Windows, the absolute() primitive didn't behave correctly when its optional dir parameter included the drive letter of a non-current drive, and its file parameter was an absolute path with no drive letter specified. This caused grep-examine to fail in certain cases.
14 B13 The check_file() primitive failed to clear the provided structure when given a URL and in certain other special cases, resulting in grep sometimes skipping files when searching remote files via a URL file pattern.
14 B13 Unfilling a highlighted region with Alt-q no longer mistakenly unfills additional paragraphs following the specified region when invoked with a numeric argument between 2 and 5.
14 B13 The nonfunctional T subcommand in set-display-characters was removed.
14 B12 Grep and file-query-replace sometimes misinterpreted an absolute path with wildcards.
14 B11 A regression in Epsilon for Windows beta 9 that caused characters in the range 128-159 to display incorrectly was fixed. The set_character_property() primitive recognizes a new CPROP_DEF_REPL code to translate from the default 8-bit encoding to Unicode in Epsilon for Windows.
14 B11 Epsilon should no longer offer, as a default, the name of the last Unicode encoding selected, at a prompt for something other than a Unicode encoding name.
14 B11 Epsilon no longer crashes when it tries to display a function name longer than roughly 1000 characters on the mode line.
14 B11 Epsilon tries to recover from certain internal errors related to EEL's setjmp() primitive, and provides better logging of such problems. Some EEL subroutines now use setjmp() in a more reliable way.
14 B10 A regression in beta 9 caused Epsilon for Windows to display incorrectly when its window was more than 255 characters wide.
14 B9 In beta 8, some C++ code was misparsed due to a bug introduced when adding support for C++ raw string literals, resulting in incorrect delimiter matching and similar issues.
14 B9 Epsilon no longer gets confused by C++ numeric literals like 123'456'789 in certain contexts.
14 B9 In Epsilon for Windows, typing an environment variable to be substituted into a file path didn't work right when Epsilon was prompting with a drive letter without a directory name following.
14 B9 Typing # in Perl and PHP modes no longer reindents the current line.
14 B9 Attempting completion on ftp:// URLs could make Epsilon exit unexpectedly if it required entering a password.
14 B9 Under Windows 10, with display scaling active and a small font size selected, some column-based display operations were inconsistent due to Windows 10's use of fractional-pixel character widths.
14 B8 Epsilon now recognizes vbash and similar names as bash-style shell names.
14 B8 Grep and file-query-replace didn't interpret a file pattern with extended file pattern characters like {} relative to the current buffer's directory, even when the setting for grep-prompt-with-buffer-directory said to.
14 B8 Epsilon for Unix no longer exits unexpectedly if a network operation during file name completion requires a password to be entered, instead displaying an error that it can't prompt for a password when it's already prompting for a file name.
14 B8 Completion on environment variables in a concurrent process buffer now works properly in Unix environments.
14 B8 Epsilon for Unix no longer gets stuck when a flag like -add is used to send a URL to Epsilon, and retrieving the file requires Epsilon to prompt for a password. An scp or ftp URL that names a directory must now end with a / when specified on Epsilon's command line for correct handling.
14 B8 Epsilon's Windows uninstaller performs additional checks to prevent certain issues when there are multiple separate Epsilon installations on the same PC.
14 B8 Previously, using the EEL profiler could make Epsilon crash. Epsilon has some new tests to detect certain kinds of internal bugs.
14 B8 Tagging in C++ no longer gets confused when a numeric literal in an initializer is formatted with ' characters, like 123'456'789.
14 B8 Epsilon for Windows could crash if its window was resized while it was busy performing a task.
14 B8 Epsilon for Unix may write a log file in ~/.epsilon/epsilon.log if it detects internal errors. Now, if multiple running instances of Epsilon all try to open log files, they choose a different name for each, instead of overwriting the same file.
14 B8 Epsilon for macOS run with the -wait flag now hides a spurious warning message that the open command produces in certain cases.
14 B8 With many X11 window managers, Epsilon's icon was missing from the task bar.
14 B7 Epsilon for macOS no longer unexpectedly runs in single-instance mode when invoked from the command line. Its startup helper program can now be configured to control when it uses single-instance mode, and has various other new configuration options. Various bugs in the helper program were fixed.
14 B7 The EEL compiler didn't correctly handle initializers for arrays of structures when the structure size wasn't a multiple of sizeof(int).
14 B7 Files with a #! line that runs Node.js are now recognized as JavaScript.
14 B7 The EEL debugger's r command now preserves the current key, buffer, and similar values across the recursive edit, so the EEL code being debugged will see the values it expects.
14 B7 Epsilon for Windows no longer installs the WinHelp version of its documentation into the wrong directory.
14 B7 The find-linked-file command on Ctrl-x Ctrl-l now handles file names that contain the wildcard characters comma, square bracket, curly brace, and semicolon by opening the named file if it exists, or interpreting the name as a wildcard pattern and displaying a dired listing if it does not.
14 B7 On Unix-like systems, the check_file() primitive no longer returns CHECK_PATTERN for file names that contain [ but no * or ? characters. These are now treated like any file name with no special characters, as in Epsilon for Windows. (See the is_pattern() primitive.)
14 B7 Syntax highlighting bugs in various modes were fixed, and a new method for locating some kinds of syntax highlighting bugs was added, using the new want-debug-coloring variable.
14 B6 Various grep subcommands now work properly when a single match spans multiple lines in the grep buffer.
14 B6 The set-font command was failing due to a PATH issue when Epsilon was invoked from an icon under macOS.
14 B6 Indenting is no longer confused by C++17's "if constexpr ()" syntax.
14 B6 Epsilon no longer displays the current function name using :: instead of . between identifiers in Java files.
14 B6 Tagging now works in R mode.
14 B6 Perl heredoc syntax was updated to recognize the ~ modifier added in Perl 5.26.
14 B6 The EEL compiler didn't correctly handle an alignment issue involving arrays of structs.
14 B6 The push-cmd-unix-macos-interactive variable has a new default to deal with a zsh shell grammar difference.
14 B5 A regression in beta 4 made pressing an arrow key unhighlight a region that was started through any method other than pressing Shift while using arrow keys.
14 B5 HTML/XML paragraph filling no longer produces very short lines in certain cases where the html-auto-fill-combine or xml-auto-fill-combine variables restricted breaks after short element names, and the following attribute was longer than the fill width.
14 B5 On macOS 10.15 Catalina, Epsilon's optional esetup script had multiple issues.
14 B5 Info mode now ensures its top-level Info node includes a line for Epsilon, even if Epsilon's Info file hasn't been installed system-wide. This version also fixes an issue with Info not finding Epsilon's info file on some platforms, and searches for info files in more places on Unix.
14 B4 Numeric color definitions in an .ecm file from a previous version were misinterpreted.
14 B4 Completion didn't always work properly on responses with spaces in them at non-filename prompts.
14 B4 Unicode characters sent to Epsilon for Windows by programs like AutoHotKey were misinterpreted.
14 B4 When you drag Epsilon for Windows to a different monitor, Epsilon now resets its size to work around a Windows 10 high DPI scaling issue.
14 B4 Using Shift with arrow keys to select, and then killing the region, would sometimes leave Epsilon still selecting, even if you'd released Shift.
14 B4 When a buffer has no newline at the very end, the blank space to the right of the last character is now painted with the same color and attribute as subsequent blank lines, instead of the color and attribute of the last character in the buffer.
14 B4 Parsing for compiler error messages now permits parentheses in a file name in an additional case.
14 B4 Shell mode now colors $((...)) correctly.
14 B4 On macOS, Epsilon's startup script no longer fails when XQuartz is not installed and Epsilon's app name contains spaces (which in version 14 it now does, by default). And the script now tries to close its own Terminal window in this case, even if Terminal's preference setting requires users to manually close all terminal windows.
14 B4 Some bits in the misc-language-fill-mode variable for recently-defined modes no longer conflict with earlier bits.
14 B3 The import-customizations command now retrieves customized colors in a different way and records them in a separate EEL file, fixing an issue with previous betas. And it now works properly under macOS.
14 B3 Epsilon's documentation server now works around a Windows 10 issue that kept pages from displaying sometimes.
14 B3 The export-colors command no longer discards font styles.
14 B3 Spell mode's interface to the macOS spell engine now works again.
14 B3 Epsilon's setup script for Unix-based systems should now work properly with more shells.
14 B3 In Epsilon for Windows, the color selection dialog no longer starts off with the wrong color.
14 B3 Epsilon could crash when creating a new buffer.
14 B2 Double-clicking the mouse would often appear as a single click in the 64-bit macOS version.
14 B2 The dynamically linked Linux version of EEL failed to start due to a missing rpath.

Last Updated: 27 September 2020