Happy New Year!

The TKE project just wants to wish all of you a Happy New Year!

If you are anxiously awaiting the next stable release of TKE, hang in there. The under-the-hood changes have been steadily increasing and we now have most of the major changes now in place. There is still plenty of work to do before we are calling anything "stable" at this point. I'm currently guessing it will take another month or two to get everything ready for all of you. The performance improvements are already substantial in initial testing and there are still plenty of opportunities to improve in the future. There are also a few new pieces of functionality and some functional improvements over 3.4.

Thanks for your interesting in the TKE editor and here's to a great 2018!

Roadmap for Version 3.5

Every once in a while I like to give all of you a sneak peak at what is being worked on in TKE. In the 3.5 stable release cycle, the goal is to focus on application performance, especially editing performance. There are two main factors in the success of a code editor: functionality and performance. One is not more important than the other, so it is important that TKE's development does not exclude one for the other. TKE's performance is adequate at the moment, but I would like to see improvements in a few key areas.

First, application startup performance needs to be improved again. Ideally, I would like to the see the application start in around 2 seconds or less depending on the number of previously opened tabs and the currently displayed file(s). I've noticed that the application startup time has begun to slip in recent stable releases. On Linux, I'm seeing pretty good startup time results, but on macOS and Windows, things need to be improved. Some of this is going to be in my direct control and some is not (wish interpreter startup time is out of my hands).

Second, I would like to see the time to initially view a file come down dramatically. TKE lazy loads the contents of a tab currently to help with startup performance which is a good thing; however, if you are switching tabs to a larger file, it can look like the application is locked up for several seconds. Not good.

Third, I need to greatly speed up the rendering time for markup-style languages, including Markdown and its derivatives. The language parsing that is required to highlight HTML/XML/Markdown requires a lot of custom language parsing which is much less efficient than standard built-in parsing support. I have spent a good amount of time focusing on adding functionality for writing documents in these types of languages, but it is all for not if the tool cannot process them quickly.

Fourth, I would like to attempt to speed up operations that are run as text is being entered/deleted. Some functions such as code folding, mismatched bracket highlighting, and comment/string highlighting are a bit expensive in their current implementations. Ultimately, this makes entering and deleting text feel a bit sluggish at times. Additionally, I would like to improve these performance issues so that we can add other "as you type" features such as auto-completion and code linting in the future.

As you can see, our goals are ambitious in this release period. I have been busy coding and analyzing various solutions to some of these problems already, and there is excellent promise that these performance goals can be met. However, I also need to make sure that new code doesn't come at the cost of lots of bugs and/or reduced functionality. I would like version 3.5 to be functionally equivalent if not slightly better than 3.4. To that extent, the 3.5 release date is yet to be determined. I expect this work to take a several months to complete. I don't anticipate the Changelog file for 3.5 to be as lengthy as its predecessors, but you should notice a big difference when using TKE compared to previous versions.

Note For macOS Users

Starting with macOS Sierra, I noticed a performance issue caused by getting the hostname of the machine that TKE is run from. It seemed to take around 5 seconds or so to get this information from the operating system, which is much longer that one would expect it to take.

TKE uses this information in two places. First, the hostname is displayed in the title bar of the application window, just to the left of the current working directory information. Due to the performance issue that I was seeing, I decided in version 3.2 or 3.3 to remove this from the title bar. It is still gone for macOS users in the 3.4 stable release. The second place where TKE uses it is when normalizing a file pathname in cases where the filename could exist on a different NFS mounted drive. The current hostname is compared to the hostname of the file, and if it is different, the NFS mount information is used to normalize the file's pathname. This is unavoidable, unfortunately, which causes TKE's startup time on macOS to be slower than it should be.

Recently I found an article on the web that addresses this issue (https://apple.stackexchange.com/questions/175320/why-is-my-hostname-resolution-taking-so-long). Essentially, the solution for this problem is to set the HostName system configuration variable to that of the LocalHostName system configuration variable which can be accomplished with the following terminal command:

scutil --set HostName $(scutil --get LocalHostName)

Give this command a try and see if it helps improve TKE's startup time.

Stable Version 3.4 Released

Stable version 3.4 has now been released. A brand new method of selecting text is in this release which allows you to make fine-grained selections using only the keyboard. The new selection mode packs more power than even Vim visual mode, so make sure to read about it in the User Guide and start trying it out. We also enhanced drag and drop support, included a few more handy plugins, and fixed a bunch of bugs.

Here's a full list of the new features, changes and bug fixes available in this release.


  • Added new keyboard-centric, fine-grain controlled selection mode (enabled through new `Edit / Select Mode` menu option).
  • Added ability to select a sentence with mouse by holding down Control while double-clicking the sentence.
  • Added ability to select a paragraph with mouse by holding down Control while triple-clicking the paragraph.
  • Added ability to select the text between a matching set of curly brackets, square brackets, parenthesis, angled brackets, double quotes, single quotes, backtick or comment characters by holding down the Shift and Control keys while double-clicking on any character between the surrounding characters.
  • Added ability to select an HTML/XML node by holding down the Shift and Control keys while triple clicking any character within the node.
  • Added ability to right-click on checkboxes in Markdown and MultiMarkdown to toggle their completion status.
  • Added PluginTcl and PluginHeader syntax support which performs syntax features for TKE plugin Tcl and header code.
  • Added plugin framework support for new `on_drop` plugin action.
  • Added new `number_converter` plugin to allow converting numbers to other bases.
  • Added new `markdown_drop` plugin to support proper drag-and-drop of images and URLs in Markdown files.
  • Added `wmarkentry` and `tabbar` widgets to list of widgets available to be used within a plugin.
  • Added new `api::file::all_indices` plugin API call.
  • Added plugin framework support for new `on_theme_changed` plugin action.
  • Added enhancements to bubble up/down functionality where we will now bubble by sentence, paragraph or HTML node if one of these types is selected.
  • Added new `Edit / Select` menu which contains some menu shortcuts of some commonly used selection mode macros. These primarily exist to help in compatibility with other text editors.
  • Added ability within the theme bitmap editor to move, flip, rotate and export the image.
  • Added new `tab_activeclose` image to theming engine which will allow the theme to change the image used for the tabbar close buttons when a close button becomes active.
  • Added ability to change the reading time words per minute value within the preference's `Sidebar / Info Panel` pane.
  • Added ability to drag a file/directory from the sidebar to an external application.
  • Added support to the message area in the status bar to display content on a per editing buffer basis.
  • Added link and image formatting options to `Edit / Format` submenu.
  • Added ability to drag and drop URLs into an editing buffer that supports link formatting and automatically convert the URL to a link.
  • Added ability to drag and drop image files into an editing buffer that supports image formatting and automatically convert the file into image markup.
  • Added ability to drag and drop text/files into the user response field and the `In` entry field in the `Find in Files` panel.
  • Added ability to drag files out of the sidebar (these files can be copied, moved or linked to by external applications).
  • Added support for inserting dropped text/files in an editing buffer with multicursors enabled.
  • Added new `readmeta` syntax class which can be added to text that can be shown/hidden but can be given a more readable color than other meta syntax.
  • Added date support to themes and added display of theme date to theme manager table in preferences.
  • Added ability to drag a file into the license entry field in the theme editor export window.
  • Added ability to drag a website URL into the website entry field in the theme editor export window.
  • Added ability to drag a directory into the output directory entry field in the theme editor export window.
  • Added `api::theme::get_value` plugin API procedure.


  • Added name of tag that was clicked to callback procedure when a syntax click event occurs.
  • Improved performance and accuracy of line number drawing when editing a document.
  • Auto-syntax determination algorithm is enhanced to find a best match based on matching pattern length.
  • If the `api::file::get_info` plugin API is called requesting the txt attribute the plugin architecture will allow the returned value to be used as a command.
  • Added `Directory` file type to information panel if directory information is being displayed.
  • If the `api::show_info` plugin API is called with a clear delay value set to 0, the message will be displayed indefinitely.
  • Changed `api::file::current_file_index` to `api::file::current_index`.
  • Removed `<>` virtual event support for text bindings.
  • Improved bitmap parser.
  • Changed block selection method with mouse to use just the Alt/Option modifier instead of Shift-Alt/Shift-Option modifiers.
  • Added an extra pixel of width and height to the close button used throughout the UI.
  • Adding syntax support for true/false keywords in Vala syntax.
  • Changed sentence motions to be comment block aware.
  • Changed cursor used in sidebar when moving/reordering files to indicate a move is occurring.
  • Increased width of search field in the preferences window.
  • Improved Markdown Table Beautifier plugin to correctly handle multi-column cells.
  • Changed formatting descriptors in syntax description files to use templates.
  • Changed how bottom panels are implemented which allow limited sidebar functionality, including drag and drop support while the panel is displayed.
  • Changed wording of text formatting options within the command launcher.
  • Improved text formatter to properly handle newlines within the format syntax (applying auto-indentation on insertion, if applicable).
  • Improved `current_line` plugin to colorize the current line when we enter embedded syntax areas.
  • Including embedded references to the `Language Reference` submenu and documentation search.
  • Updated and improved all themes.
  • Updated User Guide.
  • Updated Developer Guide.
  • Updated translations.

Bug Fixes:

  • Fixed syntax highlighting issue in Markdown syntax.
  • Fixed apostrophe issue when creating specl release notes that could cause upload issues and character problems in user upgrade notes.
  • Fixed syntax highlighting issue with mixed syntaxes.
  • Fixed drag-and-drop support for 64-bit Windows.
  • Fixed issues where a Tcl error occurs during application exit that would keep the application from exiting.
  • Fixed issue with using tokenentry widget within a plugin.
  • Fixed issue with copying information panel values to the clipboard.
  • Fixed issues when code folding is disabled.
  • Fixed issues where Edit menu commands were not directed to the proper editing buffer when split view was enabled.
  • Fixed development API documentation to remove backslash characters in API procedure names.
  • Fixed plugin preference table widgets to allow the Add and Delete buttons to be not hidden by help documentation.
  • Fixed URLs for the PTWidgets documentation within the Developer Guide packages section.
  • Fixed issue where a tab is selected in the tabbar and the close button disappears while the cursor remains in the tab space.
  • Fixed issue where importing a bitmap would not cause updates to the theme editor.
  • Fixed issue with selecting the topmost paragraph that would cause the application to hang.
  • Fixed issue with selecting an outer paragraph range.
  • Fixed issue where a line would not properly wrap if there was a previous undo/redo operation performed on the line.
  • Fixed potential syntax highlighting issue when an undo/redo is performed.
  • Fixed issue where split view and bird's eye view were not changed properly when the theme is changed.
  • Fixed issue with importing and exporting a .tkethemz theme file within Windows.
  • Fixed issue with using drag and drop on macOS systems that don't have tkdnd installed on them.
  • Fixed issue with loading a locked file upon session start.
  • Fixed issue when installing a plugin with preferences which required an application restart.
  • Fixed drag and drop built-in support for macOS when TkDND is not previously installed.
  • Fixed GenericName attribute in the generated tke.desktop file.
  • Fixed translation issues with table header text in preference panels.
  • Fixed default theme colors for remote file viewer window.
  • Fixed issue when the license file `Browse...` button is clicked in the theme editor export window when text exists in the field.

Stable Version 3.3 Released

Stable version 3.3 has now been released. A new information panel containing various file/directory information is now available from the sidebar. Manual sorting of items within a directory in the sidebar is now supported. Added a few new plugins and made several enhancements and fixes to the plugin API. Of course, the usual round of bug fixes and other enhancements have been made.

Here's a full list of the new features, changes and bug fixes available in this release.


  • Added new sidebar info panel in sidebar which can display image thumbnails, image size, file size, file permissions, file owner, file group, modification date, version control current version, line count, word count, character count, average reading time, MD5 checksum, SHA-1/224/256 hash values and favorited status for both files and directories.
  • Added plugin support for adding information to the sidebar info panel about a file or directory.
  • Added ability to theme the sidebar info panel in the theme editor.
  • Added preference item to make the sidebar info panel remain in view when the sidebar loses keyboard focus.
  • Added preference item to determine which information is displayed in the sidebar info panel.
  • Added new `get_current_version` method requirement for version control tooling.
  • Added new calendar plugin for inserting mini calendars into document.
  • Added preference option to show/hide hidden files in the sidebar.
  • Added Uncolorize menu option to the CSS Colorizer plugin.
  • Added Markdown syntax support for **::**_highlight_**::** and **||**_strikethrough_**||** syntax.
  • Added ability to close a file from the sidebar by hitting the Backspace key when the targetted file is selected.
  • Added ability to manually sort the contents of a directory or move files/directories to a different directory within the sidebar via drag-and-drop.
  • Added new `api::sidebar::set_info` API procedure.
  • Added new `publish_markdown` plugin which can be used to generate the User Guide and Developer Guide without the need for third party applications.
  • Added API support for new color picker, table and help preference widgets.
  • Added new `api::export` plugin call which allows plugins to use the built-in export capability on custom text.
  • Added ability to theme the scrollbars that are used alongside ttk-style widgets.


  • Updated Tcl reference documents to use version 8.6 instead of version 8.5.
  • Upgraded Tablelist widget from 5.17 to 5.18.
  • Updated some of the built-in themes to make the new file information panel look better than the default look.
  • Improved Tcl syntax highlighting.
  • Made tk::PlaceWindow, tk::SetFocusGrab, tk::RestoreFocusGrab and tkwait commands callable from within plugin code.
  • Changing default shortcut for `Edit / Select All` menu option from Command-A/Control-A to Shift-Command-A/Shift-Control-A.
  • Refactored main Vim control logic for improved performance.
  • Themed the indentation, syntax and sidebar menus.
  • Changed behavior of Markdown/MultiMarkdown to insert blank line when hitting enter on a list item line that contains no content.
  • Removed `Edit / Delete` submenu.
  • Added syntax highlighting for Markdown and MultiMarkdown quoted text.
  • Added formatting to DocBook syntax.
  • Improved syntax highlighting in DocBook syntax.
  • Enhanced `api::sidebar::get_info` API procedure to include attribute values of is\_dir, is\_open, parent, children and sortby.
  • Added `-height` option to API preference text widget options set.
  • Removed support for Ulysses in managing documentation since we will no longer being using this utility for development purposes.
  • Changing plugin preference panes to allow scrolling of preferences within the pane.
  • Integrated new `-help` option into several plugin widgets to optionally associate help information into the widget display.
  • Changed out all ttk-style scrollbars with custom scrollbar for UI consistency and scrollbar minimalism.
  • Changed About window "Credits" text font to match the rest of the window.
  • Cleaned up various UI elements within the remote file and font chooser dialog windows.
  • Updated translations.
  • Updated User Guide.
  • Updated Developer Guide.
  • Improved the look of code examples within the Developer Guide.

Bug Fixes:

  • Fixed sidebar issue on Windows where files would be duplicated within a folder when folders at top preference item is enabled.
  • Fixed issue with displaying URLs from with TKE to a web browser on Windows.
  • Fixed issues with incorrect images being rendered in the User Guide and Developer Guide.
  • Fixed issue with using colon character in snippet regexp patterns.
  • Fixed issue with escaping forward slash characters in snippet syntax.
  • Fixed issue with right-clicking ctext clickable text for macOS platform.
  • Fixed issues with sidebar and tab popup menus not conforming to the chosen theme.
  • Fixed issues with various themes to help make menus more readable.
  • Fixed issue with Untitled tabs causing unexpected sidebar behavior.
  • Fixed issue where multicursors disappeared when Escape was entered after inserting text.
  • Fixed issue with menu theming on macOS.
  • Fixed CSS Colorizer plugin documentation.
  • Fixed line-spacing issues between displayed lines that are line-wrapped.
  • Fixed syntax issues with URL validator plugin README file.
  • Fixed issue where meta characters were not being colorized properly.
  • Fixed translation issue for tooltips in find panel.
  • Fixed issue that could cause tooltips to not be displayed.
  • Fixed issue in theme editor that caused image colors based on swatches to not get updated when the associated swatch color is changed.
  • Fixed issue where calling `api::preference::get_value` from plugin code would cause syntax error.
  • Fixed plugin issue for Tk widgets that contain `-variable` or `-textvariable` options where variables were not being updated to match widget.
  • Fixed issue where text widgets in plugin preferences would not properly save text changes made to them.
  • Fixed various issues with using Tk widgets in plugins that called command code.
  • Fixed issue within About Credits text area that could allow the user to edit the text found in that window.
  • Fixed issues with exporting on Windows.