V1.5.2 --------- * Fixed the printing thread. (Previously, it created many instances of the warning message "QBasicTimer::start: Timers cannot be started from another thread" because the document wasn't inside the printing thread.) * Fixed an old issue in replacement highlighting of multiple tabs. * Demand attention under Wayland when a window needs activation, although window managers may ignore it. * Don't escape a start single quote in C/C++ when it follows a letter or number. * Skip double-parenthesis constructs with bash here-docs. * Don't try to save as root when the parent directory doesn't exist. * Respect the enforced syntax of an unsaved document when removing its trailing spaces on saving it. * Check the existence of "gio" before using it for opening URLs. * Fixed the localization of date and time with Qt6. V1.5.1 --------- * Added a safe and simple workaround for KWin6 under X11. * Under X11, if there is a minimized window on the current desktop, open files as new tabs in it and unminimize it. V1.5.0 --------- * Removed Qt5 support. * Prevent the cursor position from being changed when files are dropped into the text view. * Support regex replacement with capturing groups. The credit goes to Marco Holmer for suggesting not only this feature but also the way of implementing it. * Enhanced the conversion to start case by including 100,000 characters and also finding the first letter of each word. * Scroll horizontally with mouse wheel inside text view if Alt is pressed and horizontal scrollbar is visible. * Highlight Openbox's "themerc" files (revived by LabWC). * Fixed a rare issue in the geometry of a warning bar animated during window resizing. * Covered a case of here-strings in bash. V1.4.1 --------- * Added more types to C/C++ syntax highlighting. * To prevent problems on non-Linux systems, don't handle main arguments before calling `QCoreApplication` (Haiku OS may not provide a string argument before `QCoreApplication` is called). * Added an option for a small margin around the text. * Prevented window dragging from the line number strip (which was possible with widget styles like Kvantum). * In Preferences dialog, don't let the mouse wheel focus spin and combo boxes or change their values when they aren't focused. * In Preferences dialog, set the values of spin-boxes to their defaults if they are cleared. * Don't remove single trailing spaces with LaTeX. Also, added more formula keywords to LaTeX. * Fixed showing of the number of selected characters without selection highlighting. V1.4.0 --------- * Check the view cursor before setting it. * Recognize `text/plain;charset=â¦` as plain text when pasting (Qt doesn't). * Highlight comments inside formulas with LaTex. * Use icons in the recent files menu where possible. * Prevent tab DND from tab close button. * Focus side-pane with Ctrl+Escape. * Safeguard the file type filters of file dialogs from bad translations. * Added `application/x-zerosize` to the desktop file (after a change in GLib). * Added an option for showing window title on the menubar. * Fixed the tab tooltip for special folders. V1.3.5 --------- * Used QPointer for TextEdit's highlighter (for a more robust code but without behavior change). * Enabled tab DND under Wayland (by detaching or dropping the tab after finishing the DND) and improved tab DND in general. * Always open a group of files in a single window, even when the app is configured to open files in separate windows. * Prevented total item deselection in the side-pane mode with Qt6. * Added the side-pane and session actions to the toolbar. * Limited the side-pane's default width to 40 times the width of the space character of the widget font. V1.3.4 --------- * Enable/disable the Paste action of the Edit menu appropriately. * Covered single quote as digit separator in C++(â¥14) syntax highlighting. * Initialize variables of "TextEdit" and "TabBar" before events are triggered. * Enabled instant tooltips and corrected context menus on Wayland, by specifying their parent widgets. V1.3.3 --------- * Fixed crash on pasting with empty clipboard. * Covered tab-indented here-docs in Bash syntax highlighting. * Covered indented here-docs in Perl syntax highlighting. * Silenced the compilation warnings with Qt ⥠6.4. V1.3.2 --------- * Added a real Unix signal handler. It was needed to work around a Qt6 bug under Wayland, which reported close signals of Wayland WMs as non-spontaneous (there was no prompt on closing windows by Wayland WMs). * Removed instant tab tooltips when tab DND is disabled (because some Wayland compositors have problem with instant tooltips of inactive windows). * Consider the script sign in Lua. * Fixed the enabled state of the "Other" action in the "Encoding" menu. * Removed the detection of legacy encodings and simplified the "Encoding" menu with Qt6. * Added Toml syntax highlighting. * Reduced the maximum block size of HTML for syntax highlighting to 5000. * Simplified finding of Qt modules with cmake. V1.3.1 --------- * Used Qt D-Bus for creating a single-instance app (because the lock-file metod failed under harsh circumstances). * Removed the qmake compilation (have no time for it, especially with Qt D-Bus). * Added a workaround for a Qt5 bug that caused a crash if SIGTERM was sent while the replacement dock was visible. V1.3.0 --------- * Added an option for using system icons where possible. By default, internal icons are used. * Set the scroll mode to per-pixel in the side-pane as a workaround for a bug in QListWidget's auto-scrolling. * With Qt6, accept the close event on receiving SIGTERM and similar signals (because, in Qt6, "qApp->quit()" calls "closeEvent()"). * Make sure all windows are deleted when receiving SIGTERM and similar signals. * Made Qt6 font setting backward-compatible. * Fixed the problems in restoring of window size and position. * Added a workaround for a QPlainTextEdit bug that doesn't report a selection change on undoing/redoing. * Fixed the selection highlighting with huge selections. * Fixed a problem in highlighting of Yaml literal blocks. * Center page numbers horizontally when printing. * Highlight cmake's bracket comments and bracket arguments. V1.2.0 --------- * Covered some details in XML syntax highlighting. * Fixed searching in unusually large documents and also highlighting of their selections (scrolling took a lot of CPU time in some cases). Also, prevented high memory and CPU usages when searching regular expressions in such documents. * Select the text between spaces with Ctrl + double click. * Restore view position on reloading as precisely as possible by using text cursors. * Don't list "theme" and "desktop" in the language menu. * Added Rust syntax highlighting. * Covered multiline double quotes in QML. * With Qt6, hide encodings that are not supported by Qt6. * First try the file manager DBus interface when opening the containing folder. * Removed the action for opening the containing folder when running as root (because there are DBus complications with most file managers). * Bumped the minimum required version of Qt5 to 5.15.0. V1.1.1 --------- * Fixed highlighting of Markdown's single-line codes with multiple backquotes. Also, faster syntax highlighting for Markdown. * Prevented a rare hang-like behavior with malformed XML documents that have huge lines. Also, followed stricter rules for highlighting of "<" in XML. * Workaround for wrong positions of instant tab tooltips with Qt6. V1.1.0 --------- * Fixed an issue in saving with UTF-16. * Enabled experimental compilation against Qt6. With cmake, "ENABLE_QT5" should be set to "OFF" (as in `cmake .. -DENABLE_QT5=OFF`) â it's "ON" by default. * Better inclusion of Hunspell. * Added Tcl syntax highlighting. * Increased the maximum number of recent files to 50. * Stretch the text view in the side-pane mode and save the splitter position in pixels (if it should be remembered). Also, ensure that the splitter is visible and its width isn't greater than that of the view on startup. * Consider the special case, where the value of "wheel scroll lines" is zero. * Don't try to restore scrollbar position after reloading because it can't be done precisely. Instead, center the text cursor. * Prevented a very rare stack overflow when matching brackets in huge files, by replacing recursive methods with loops. In this way, extremely distant brackets can be matched instantly. * Fixes and improvements to Lua syntax highlighting, especially regarding comments, (nested) string blocks and speed. * Added lots of keywords for various programming languages. * Fixes and improvements to XML syntax highlighting. * Check the root instance only with the first window. V1.0.1 --------- * Better inertial scrolling with touchpad and sensitive devices. * Scroll one page per wheel turn when the cursor is on the vertical scrollbar and half the page when Shift is also pressed. * Detect special cases of UTF-16. * Scroll the view up/down by one page without moving text cursor with Ctrl+PageUp/PageDown. * Don't try to save or restore window position under Wayland because, otherwise, menus might appear at wrong positions. * Fixed tab detaching when the window is closed with its last tab. V1.0.0 --------- * Don't highlight the rest of a JSON document when encountering a huge line (because the formats couldn't be determined). * Refactored the code of syntax highlighting. * Examine final targets of symlinks when detecting programming languages. * Added group separators to the numbers of lines, selected characters and words on the statusbar. * Better property-value pairs in CSS. * Covered "verbatim" in LaTex. * Considered a probable comment after the start of a literal block in Yaml. * Added an option for disabling menubar accelerators. * Added Go syntax highlighting. * AppStream metadata (https://www.freedesktop.org/wiki/Distributions/AppStream/) added by Balló György (City-busz at GitHub). * Handled the case where the start sign of a JavaScript/QML multiline comment was inside a regex. * Fixed an issue in Ruby's regex, highlighted its back quotes and added a very minimal support for its command substitution. * Speed up syntax highlighting by applying the main text format only inside the visible rectangle and also by remembering single quote and back quote. * No need to the window system identifier with tab DND. * Bumped the version to 1.0.0. FeatherPad has been stable for a long time and some users may mistake "0.X.Y" for "unstable". V0.18.0 --------- * Fixed an old but rare problem in highlighting of multiline comments. * Added Pascal syntax highlighting. * Added Java syntax highlighting. * Better highlighting of numeric literals in some programming languages. * Taken into account some general variables of Perl when highlighting its syntax. * Taken into account the possibility of using unpaired or different paired delimiters for the second part of Perl's replacement operators. * Fixes and improvements to Ruby syntax highlighting. * Prevent Qt from giving any non-plain text to the selection clipboard. * Made PageUp/PageDown select the first/last item of the search history when the search line-edit is focused. * Fixed the lack of Perl-style comments in PHP syntax highlighting. * If needed, save cursor positions when the app is terminated by SIGTERM. * Prevent the spell checker from changing an uneditable document. * Added an icon to the tabs/view-items of files that have targets but aren't symlinks (e.g., their parent directories are symlinks). Also, (1) when a final target exists, two items are added to the tab/view-item context menu for copying its path and opening it, and (2) if a file and some of its targets are opened, only the first one is editable by default. * Added JSON syntax highlighting. * Added "math" and "equation" to LaTex syntax highlighting. V0.17.2 --------- * Fixed a regression about here-docs in 0.17.0 V0.17.1 --------- * Removed the code for making the cursor busy after 1 second â cursor overriding isn't marked as thread-safe by Qt. V0.17.0 --------- * Consider the locale when showing line numbers and omit the group separator. * Disable "Save with Encoding" with uneditable files. * Fixed restoring of the current side-pane item after another item is closed by middle-clicking. * Fixed a problem in closing side-pane items with filtering. * Workarounds for Qt bugs in keyboard navigation inside a list view when some items are hidden. * Made the warning bar more flexible by giving it a timeout, which can be 0 for permanent bars. * Allow saving as root without a root instance when the user doesn't have the permission to write. Polkit's pkexec is used for gaining the root privileges. * Distinguish Wayland from the lack of X11. * Guarantee that the session dialog has focus after opening a session. * Prevent killTimer() error warnings. * Added LaTex to the recognized syntaxes. * Workarounds for bugs in Qt's default printing. Qt can't handle dark color schemes and the reverse order with printing. Now, FeatherPad supports both. * Do printing in a separate thread, so that, if it takes a long time, FeatherPad could still be used. * Added simple support for gvfs' admin. * Several fixes to Perl syntax highlighting. V0.16.0 --------- * Removed the redundant ampersand from the title of the replacement widget. * Added a tooltip to shortcut editor. * Fixed a small problem in highlighting of Yaml braces. * Fixed the reattachment of the replacement dock to the top, which was disabled since "AllDockWidgetFeatures" became deprecated. * Added the current line highlight color to Preferences â Syntax Colors (although it isn't a syntax color, it needs to be different for light and dark color schemes). * Show the prompt label of Preference dialog when there is a change in the syntax colors. * Added an item to tab context menu for opening containing folder. * Made the warning bar disappear when clicked and removed its close button. * Close the warning bar after 10 seconds if the user doesn't close it. * Consider the current locale when sorting lines. * More intuitive sorting of items in the side-pane and session dialog by treating dot as a separator. * Removed the option for scroll jump workaround (because it wasn't FeatherPad's job). * Added "To Start Case". * Removed the 50-ms delay in text updating because, apparently, Qt's update requests are appropriate now. * Focus the editor's view when the Escape key is pressed. * Let the user disable the recent files feature by setting its number to zero. * Added a "standalone" option to the command-line. It's especially useful when FeatherPad is chosen as the "git" editor. V0.15.0 --------- * Added optional selection highlighting (without interfering with search highlighting). * Fixed a small bug in search highlighting with tab DND/detachment. * Added simple Haxe highlighting (by using JS codes). * Fixed multiline "<â¦/>" in JS. * Disabled the RTL workaround when lines aren't wrapped. * Don't clear replacement highlights when the window is minimized. * Always truncate absurdly huge lines in uneditable documents. * Fixed a problem in the state of the language button after toggling syntax highlighting. * Fixed a rare case, where the text's format and highlight weren't updated. The fix also simplifies the code. * Highlight only the first 1000 replacements if there are more. * Added an item (to the Edit menu as well as the context menu) for converting all text tabs to spaces. * Added an option to paste file paths instead of files (by default, FeatherPad opens pasted files). V0.14.2 --------- * Overrode Qt's default behavior with the Home key. * Fixed a bug that allowed cutting of read-only texts. * Don't mistake a (commented) Yaml note followed by a colon with a Yaml key. * Considered the single quote in CSS values. * Highlight JavaScript's hash-bang (don't mistake it with a regex). * Updated the code for Qt 5.15. V0.14.1 --------- * Fixed a miscalculation in highlighting of multiline CSS values. V0.14.0 --------- * Handle relative file paths correctly when they contain no slash. * Get the locale name by using Qt methods when guessing the encoding. * Use more private member variables and also static local variables to speed up syntax highlighting, especially with HTML, XML, Bash and Perl. * Use bold font before the first dot in JS property accessors. * Highlight a JS regex at line start if the previous line ends with a single-line comment. * Support JS template literals (and highlight them like single quotes). * Considered a rare case of here-docs, where a delimiter is commented out but another valid delimiter comes after it. * Fixed and improved CSS highlighting. * Don't include an ending single quote in an URL pattern. V0.13.1 --------- * Don't preserve the last file's extension on saving a new tab. V0.13.0 --------- * Allow dash in URL schemes (as in "google-drive") and also some special characters (-,;!@*') in URLs. * Support syntax color customization, with two separate settings for light and dark color schemes. * Also added an option for the whitespace color value. * Never use processEvents(); it makes single-instance apps prone to crash in rare cases. * Consider the HTML ampersand valid in "&name;", "&number;" and "&hexadecimal;". * Yet smarter Shift+Enter with alphabetical lists. * Bypass medium focus stealing prevention. * Fixed a problem in highlighting of multiline comments (with languages that have regex). * Fixed highlighting of Markdown code blocks without language. * Remember cursor's horizontal pixel position before Backspace/Enter and restore it after Down/Up. This feature was removed with Backspace due to a regression in Qt 5.14.1. * Found and fixed a potential issue in translations (thanks to Masamichi Ito â ito32bit at GitHub). * Don't read custom shortcuts and syntax colors from global config files because the user should be able to restore their default values. V0.12.1 --------- * Removed "changelog" and "gtkrc" from the language menu (like "srt") while keeping their syntax highlighting. * Allow searching in the language menu by typing continuously. * More informative message when a non-text file isn't opened because of preferences. * Fixed disabled sort line actions in context menu. * Fixed a case of escaped quote/brace/bracket in YAML. * Reformat the visible text rectangle on toggling line wrapping. * Considered the new behavior of horizontal wheel scrolling in Qt 5.14.0. * Added a workaround for the bug in horizontal scrollbars of Qt 5.14.0. V0.12.0 --------- * Removed useless options related to icons. * Added an option for a single shared search history. * Send a mouse release event if a dragged tab can't be dropped into a window that accepts tab drops. This shouldn't be needed but some apps (like Dolphin) may incorrectly accept any kind of drop. * Don't replace double hyphens with em dashes in programming texts. * Also replace "->", "<-", ">=" and "<=" with "â", "â", "â¥" and "â¤", respectively, in non-programming texts. * Mark encoded and unencoded ampersands in HTML. * Set the limit of highlighting the syntax of a line to 10,000 characters. * Allow shortcut removal. * Added "Save All Files" for saving modifications to all files that are open inside the window. * Fixed a bug in auto-saving (when a file could not be saved, its tab asterisk might be removed and the statusbar info might change incorrectly). * Fixed the vertical offset of the current line indicator. * Added mnemonics to the close prompt dialog. * Show the busy cursor on showing the print dialog because Qt's print dialog doesn't appear immediately (an old Qt bug related to CUPS). * Added support for Dart syntax highlighting. * Also highlight numbers with some languages. * Better JS syntax highlighting. * Added a menu item to open the user dictionary. * Never let the active tab get focus. * Fixed YAML literal block indentation. * Fixed a problem in backward search and replacement, especially with regex. * On triple clicking, select the current block without selecting its newline and start and end whitespaces. * Fixes for the code of inertial scrolling. * Several fixes for markdown syntax highlighting. * Fixes for RTL, including a workaround for a Qt bug. * Added a (temporary) workaround for a nasty bug about text translucency in Qt 5.14.0. V0.11.1 --------- * Fixed an issue in highlighting of xml comments. * Fixed a regression that prevented compilation without X11. * Print with syntax highlighting if any. * Don't highlight the syntax of a line with more than 10,000 characters. * Added "y///" to Perl syntax highlighting (it's the same as "tr///"). * Optimized the highlighting code a little. * Also show the busy cursor if syntax highlighting takes too much time (with huge texts). V0.11.0 --------- * Added spell checking with Hunspell (as a new dependency). * Smarter Shift+Enter, especially with numbered lists. * Better context menu for text-edits. * Fixed tab tooltips for files inside the root directory. * Use native file dialogs by default. * Update text selection with inertial scrolling if the left mouse button is pressed. * Drag the selected text only if there is a real mouse movement (and not when the view is scrolled by the wheel of a motionless mouse). * 3 spaces between statusbar info sections (instead of 4 spaces). * Replaced the Qt methods that were deprecated by Qt 5.13. * Also save settings on closing the Preferences dialog (and not only on exiting). * If the font is remembered, save it on closing the font dialog (and not only on exiting). * Also toggle the insert mode when the keypad insert key is pressed. * Lots of fixes to Perl syntax highlighting, especially by adding regex to it. * A new font dialog that distinguishes programming fonts from others. * Wait for the local socket to be created in case "/tmp" isn't on RAM. * Don't allow multiple custom shortcuts for one action. This is also a workaround for Qt's Meta key bug, that treats Meta like a non-modifier. * Fixed the old miscalculation of the width of line number strip. V0.10.0 --------- * If a window hasn't reported yet on which desktop it is, that means it's created a moment ago. So, open the next file inside it. * When the option "Always open in separate windows" is checked, also respect it on opening multiple files with command line. * Workaround for a Qt bug that gives non-plain text to clipboard on copying/cutting/selecting text. * Disabled tab DND without X11, mainly because Wayland has a serious problem with QDrag. * Added cmake support (in addition to qmake). * Added lots of cmake patterns for syntax highlighting. * Added support for searching/replacing regular expressions. * Fixed a crash under Wayland when calling FeatherPad twice. * By default, replace triple periods and double hyphens with ellipses and em dashes respectively, on typing. That can be disabled in Preferences. * Always remember the Preferences dialog size. V0.9.4 --------- * BSD issues fixed by Brian Callahan (ibara at GitHub). * Don't toggle the insert mode when a modifier is pressed. * Don't consider the screen width when eliding path tooltips (because it can be zero at the login moment -- although that doesn't have effect in practice). * No need to consider the screen size when resizing the window at startup. * Added YAML and Fountain to syntax highlighting. * Don't consider empty shortcuts ambiguous in Preferences dialog (they are possible with localization). * Fixed an issue in deciding whether unmodified docs should be savable on closing the Preferences dialog. V0.9.3 --------- * Fixed some small mistakes in the code (thanks to shlyakpavel at GitHub) * Added support for highlighting C++11 raw string literals (i.e. R"DELIMITER(STRING)DELIMITER"). * Set the point size of the default font to that of the application font. * Support optionally translated Help files. * macOS support by shlyakpavel at GitHub. * Added reStructuredText to syntax highlighting. * Dropped QDesktopWidget. * Fixed custom shortcuts (especially, made them independent of the language and OS). * Show a warning bar once with a root instance window (only for Linux). * Skip non-text files by default (they may take a lot of CPU time). V0.9.2 --------- * Fixed the extra CPU time taken by bracket matching. * Fixed some typos (thanks to flopp at GitHub). * Ensure that the tab drag source is one of our windows (and not a root instance, for example). * Use our standard URL pattern with changelog too. * Added an option to remember the window position (disabled by default). * Show status bar by default (for users to find advanced options more easily). * When copying the file path to the clipboard, include its name too. * Added actions for sorting selected lines (to the right-click menu). * Removed an old workaround for KDE's clipboard because it isn't needed anymore and can cause a delay on startup. V0.9.1 --------- * Two more symbolic icons. * Avoid conversion from "const char*" to "ushort". * Set the window title to the whole path, including the file name. * Instant tooltips for the side-pane. * Workaround for a Qt bug, because of which, "FullWidthSelection" isn't respected when line ends are shown. * Scroll the view when the mouse wheel is turned on the line number strip. * Center the current line on double clicking the line number strip. * Allow customizing tab switch shortcuts. * Show a warning if the size limit for syntax highlighting is exceeded. * Disable the language button when there is no highlighter. * Disable syntax highlighting on printing (because the whole document may not be highlighted). * Draw the warning bar as a translucent layer over the tab widget instead of putting it into its layout. Also, animate its appearance and closing. * First try "gio" for opening hyperlinks because Qt may resort to "xdg-open", which isn't a good choice sometimes. * Added a workaround for a new bug in KDE's file dialog, which doesn't change directory with selectFile(). * Changed old-style casts to C++ ones. * In the session dialog, when a text is typed inside the list, type it inside the filter line-edit too. In this way, filtering becomes easier. * Simplified the line-edit code. * Fixed the exchange of the last and first tab shortcuts in the side-pane mode. * Added an action for activating the last active tab (with F1 as the shortcut, by default). * Allow compilation without X11. * Haiku support by khallebal at GitHub. V0.9.0 --------- * Changed versioning -- "0.9.0" instead of "0.9", for example. * Added an option for the text tab size in terms of spaces. * Added "To Upper Case" and "To Lower Case". * Always fall back to the URL highlighter (forget the previous conditions). In this way, not only the behavior is more logical but also the code is much simpler. * Disable the language button for documents that are made uneditable because of their contents. * Open the files of the last window instead of starting with all recent files (if the related option is checked). * Restore cursor positions with last window files too. * Remove the lock file only at the end, when the config is written, because writing may take some time with cursor positions. * Remember the splitter position also when the side-pane is removed. * Before focusing an existing side-pane with its toggling shortcut, ensure its visibility. * Added the overwrite mode, which is toggled by pressing the Insert key. * Added an option for saving unmodified files. * Added an option for closing a window on closing its last tab. * Fixed a regression in recognizing special files (started when QRegExp was replaced by QRegularExpression). * Added Ctrl+Up/Down for scrolling by one line without moving the cursor. * Added Meta+Up/Down for going to the same position in the previous/next unwrapped line. * Added shortcuts (Ctrl+Shift+Up/Down) for moving lines. * Added a history popup to the search bar. * Set the window title to the path. * Also open paths that point to nonexistent files (to save them later). * Don't show the warning bar when there's a modal dialog. * Added command-line options for cursor position. * Deal with relative paths completely. * Added an option to not permit opening of non-text files. * Added the number of pages to tab/side-item context menu. * Made Ctrl+Tab, Ctrl+Meta+Tab and Shift+Tab really align the text. * Covered regex inside QML too (with syntax highlighting). * Never remove trailing spaces with diff files. * Made highlighting of JavaScript regex faster and fixed some bugs in it. * Added an option for thick text cursor. * Made the current line number bold and added a marker for wrapped lines. Also made the line highlighter much milder. * Center the current line on clicking inside the line number strip. * Toggle side-pane by middle clicking an empty space inside it or inside the tab-bar. * Put the line number strip on the right with an RTL layout. V0.8 --------- * Close the warning-bar when the text is scrolled. * Fixed the workaround for the RTL bug in QPlainTextEdit (it included an odd line and the indentation lines were disabled for RTL). * Some fixes for markdown and sh syntax highlighting. * Fixed highlighting of here-docs for languages other than sh. * Fixed highlighting of bash command substitution by using a completely different approach with a simple logic. * Added the symlink "fpad". * Added an options for auto-saving of opened files (disabled by default). * Fixed a potential cause of crash in the function "formatOnTextChange()" by using the object "this" in the singleShot timer. * Close tabs on releasing the middle mouse button instead of pressing it. * Add a new tab on double clicking an empty space of the tabbar. * Added a warning about the lack of permission to read. * Show warnings on focusing the window or changing the tab when a file is modified in another way or removed. * An option for showing the cursor position on the statusbar (disabled by default). * Support syntax override (disabled by default). * An option for vertical position lines. * Don't Activate the window repeatedly on opening multiple files because, otherwise, the input might be blocked. * Fixed a mistake in localization that didn't let Simplified Chinese be detected. * Added a configurable date and time pasting. * Open hyperlinks of highlighted texts by left-clicking them while the Ctrl key is pressed and also with an item in the context menu. * Put the cursor at the right-click position if it has no selection. * Replaced QRegExp with QRegularExpression. * Added an option for removing trailing spaces on saving (Markdown's trailing double spaces are taken care of). * Added Undo/Redo to custom shortcuts, although their default shortcuts are hard-coded in Qt. * Don't show the shortcut strings of the editor context menu because they can be misleading. * Fixed an old bug in font setting when the document was zoomed. * Show whitespaces or line/document ends with normal texts too (by using the URL syntax highlighting). * Never show the horizontal scrollbar on wrapping (when whitespaces are visible). * Instead of QSharedMemory, use a lock file to create a single instance application because QSharedMemory not only is unsafe in case a crash happens (catching a crash is not an option) but also may persist without a crash and even after being attached and detached, resulting in an unchangeable state. Also, for whatever reason, QSharedMemory may cause random delays. * Never use QCoreApplication::processEvents() because the waiting object may be deleted meanwhile. * Support scss (without syntax error but with its keywords). * Added translators' names/links to About dialog. Also added the license info. * Handle """, ">" and "<", especially in XML. * Support hard-coded symbolic icons that change their colors appropriately (adapted from Cantata). * Don't let QPlainTextEdit's built-in undo/redo shortcuts cause a scroll jump when there's nothing to do (such scroll jumps are a Qt bug, in my opinion). V0.7 --------- * Remember cursor positions for files that are managed by the session dialog (thanks to AcarBurak at GitHub for the idea). * Side-pane mode with filtering. * French translation by Cyril Cottet. * Also apply all settings when Escape is pressed to close the Preferences dialog. (Some settings were applied only when the Close button was pressed). * Added an option to save a session only from the current window. * An option for always opening files in separate windows. * Fixed a memory leak in making the cursor busy on closing a window with a tab (found by valgrind). * Fixed a bug in bracket matching, which happened when a selected text was removed while the cursor was at its start. * Get red of "foreach" because it is deprecated and will be removed sooner or later. * Fixed double connections with syntax highlighting of dropped pages. * Don't set the right-clicked side-pane item as the current item. * Added items for closing next/previous tabs to side-pane context menus. * Fixed incomplete syntax highlighting after the active tab is changed quickly several times. * Distinguish opened symlinks visually. Also, add context menu items for copying their target paths and opening their targets. * When checking if a file is already opened, also consider symlink targets. * Syntax highlighting for regular expressions of JavaScript (/.../). * Fixes for the syntax highlighting of HTML, especially its style and embedded JavaScript. * Reduced the maximum file size to 100 MiB. * Truncate all lines with more than 500,000 characters while loading a text because they would take a lot of CPU time if shown. Append this string to the truncated lines: " HUGE LINE TRUNCATED: NO LINE WITH MORE THAN 500000 CHARACTERS". Also, don't highlight the syntax of documents with such lines. * Don't format huge lines (with more than 50,000 characters) in CSS. This is especially useful with HTML syntax highlighting. (Kate avoids this problem by "jumping" over huge lines while scrolling but that isn't a good solution, in my opinion.) * Open non-text files as well as files with huge lines as completely uneditable documents to prevent accidental overwritings. * A workaround for a Qt5 bug that will cause a crash if "QPlainTextEdit::setTextCursor()" comes before "QTextCursor::endEditBlock()", near the end of a very long line. Similar bugs were reported but, apparently, there is a buggy code at the root of all Qt5 crashes related to "QPlainTextEdit::setTextCursor()". V0.6.3 --------- * Optional inertial wheel scrolling when the cursor is inside the text view. * Use the native font dialog as a workaround under GTK environments. V0.6.2 --------- * Added playlists to syntax highlighting. * Fixed single-line comments when the comment sign is repeated after being quoted. * Fixed two bad typos in "session.cpp". V0.6.1 --------- * Improved encoding detection. * Always open non-text files as UTF-8 (and detect UTF-16 and UTF-32 better). * Multiple-line indentation with Tab and de-indentation BackTab (Shift+Tab). * Ctrl+Tab for a 4-space tabulation and Ctrl+Meta+Tab for a 2-space one. * Middle-click closes the tab. * Don't open files > 500 MiB. * Added a warning-bar for non-prompt messages. * Added markdown to syntax highlighting (thanks to AcarBurak at GitHub). * Highlight the syntax of sh double quoted code substitution variables "$(...)". * Russian translation by Vladimir Sharonin (Survolog at GitHub). * Polish translation by Marcin MikoÅajczak (m4sk1n at GitHub). * Danish translation by scootergrisen at GitHub. * Made translation support optional. * Warn the user about a previous crash. * Added an option for native file dialogs. * Restore the scrollbar position, in addition to the cursor, on reloading. * Consider "next-line" comments (with an ending back-slash) in c/c++. * Workaround for "the hover bug" in Qt5 (will it ever be fixed?!). * Highlight the syntax on text change too (because otherwise, the text won't be formatted if the whole visible text is pasted). * Auto-bracket support. * A workaround for the RTL bug in QPlainTextEdit. * A workaround for the scrollbar range bug in QPlainTextEdit (the range wasn't updated correctly on changing font size). * Don't let the statusbar text change the window width. * Added options for showing whitespaces and line/document ends with syntax highlighting. * Match brackets too (in addition to parentheses and braces). * Added config files to syntax highlighting. * Support Shift+Enter (useful e.g. to write code comments). * Added a shortcut editor to Preferences for customizing some shortcuts. * Filtering for the session manager dialog. V0.6.0 --------- * FeatherPad deserves a new version. * Made the number of the "Recently Modified" menu items optional. * Give each tab a separate search bar to preserve search undo/redo history on switching tabs and also to have completely independent searches. * Removed the remainder of the old C structure of the code. * Change the title of the Replacement dock appropriately on tab switching. * Workarounds for some KDE bugs (automatic mnemonics and double slashes). * An option to show the recently opened files instead of the recently modified ones. * Added a prompt label to the Preferences dialog. * Support Perls's POD (in syntax highlighting). * Session management. * Set the maximum tab length to half the tabbar size and elide tab text dynamically. * Always ensure enough contrast between the active/inactive text selection color and the line highlight color. * Added an option that, by default, will append an empty line on saving if the last line of the document isn't empty. * Iconless mode. V0.5.9 --------- * Added support for FreeBSD. * Added support for text zooming with Ctrl+wheel. * Added an option for the tab navigation with keyboard to wrap around. * Translation support (also added an Esperanto translation). * Support for opening files with newline in their names. * Support for hiding menubar. * Added a lot of CMake and Python keywords to syntax highlighting. * A workaround for Qt's backward search bug. * Removed the translucency workaround because Qt-5.7 translucency problems are fixed in Kvantum (QtCurve should do the same thing). * Set an optional end limit to the forward search (for faster highlighting of found matches, especially on scrolling a large text with syntax highlighting). * An option to set the color value of the background. * An option to hide a single tab. * Add the home folder name to the singleton string because the user may not change as root. * Single-line single quote for c and c++. * Preliminary Wayland support. * Added an option for running executable script files. * Remember whether hidden files are shown in file dialogs. * Rehighlight the syntax on saving if the programming language is changed. * An option to remember last saved files on an empty startup. * "Recently Modified" menu. V0.5.8 --------- * The here-doc delimiter shouldn't be commented out. * Format note and url patterns inside Python multiline quotes. * When reformatting single-line comments inside Highlighter::multiLineComment(), consider note and url patterns too. * Added a separate option for working around the translucency bug of Qt-5.7. * When highlighting the syntax, do the main (single-line) formatting only in the visible part of the text. In this way, syntax highlighting becomes very fast for most languages. * A very simple logic for syntax highlighting of here-docs. * Remove search (and replacement) highlights on hiding the search bar. * Always show the search bar on showing the replacement dock. Also hide the latter on hiding the former. * Added an option for using dark color scheme. * An option to set a fixed start size (700x500 is still the default size). * Added an option for tab position. * Elide long tab texts. * Added two items to tab context menu for copying file name and path. * Made tab drag-and-drop independent from X11. * Fixed an old bug in opening multiple files (it was created after using threads). * Support selection of multiple files in the open file dialog. * Added a time buffer for the currentChanged() signal of QTabWidget. * Made all dialogs window-modal without letting two dialogs at the same time (as a workaround for a Qt issue). * Set the cursor to busy after one second of unfinished activity. * Explicitly disable all window shortcuts when a dialog is shown (Qt should disable all shortcuts of the main window when a modal dialog is shown. This is a Qt bug). * While files are being loaded, disable dangerous shortcuts and don't let any dialog be shown. * Added tab switch menu-items (and shortcuts). V0.5.7 --------- * Added libqt5svg5 as a dependency to 'INSTALL' (but it isn't a build dependency). * Added an option for choosing between own and system icons. * Fixed a memory leak which was created when QtSingleApplication was removed. V0.5.6 --------- * Because of a Qt5 bug, an app may crash on logging out (https://bugreports.qt.io/browse/QTBUG-50829). As a workaround, replaced all theme icons with own icons. * Added RDF, QML, docbook and xhtml to syntax highlighting. * Enable C++11. * Get unix quit signals, namely SIGQUIT, SIGINT (Ctrl-C), SIGTERM and SIGHUP (terminal closed). * When deciding to open a new window or tab, also consider the current viewport in addition to the current desktop. For example, Compiz has only one desktop, which may be divided into multiple viewports. * Explicitly call updateGeometry() for the text-edit on layout change if the main window is translucent. (Workaround for a regression in Qt-5.7?) V0.5.5 --------- * Use a separate thread to get text. (Maybe useful later.) * Set size limit for syntax highlighting. * Put the source on GitHub. * Added QtGlobal types and functions to syntax highlighting. V0.5.4 --------- * Code clean-up. * Replaced the C++-only methods for validating UTF-8 with QTextCodec::toUnicode(). * Added HDPI support. * Transformed signal-slot connections into the new syntax. V0.5.3 --------- * Reversed the change that was made for bypassing the old KGlobal-locale warning message. * Implemented auto-scrolling to selected file in file dialogs. * Replaced search push-buttons with tool-buttons. V0.5.2 --------- * At last, found a simple workaround for Qt5's scroll jump bug. * Use singleShot instead of processEvents. * Never use native dialogs (since KFileDialog can't be trusted). * Removed a ridiculous cause of crash from closeEvent(). * Fixed an old bug in auto-indentation. V0.5.1 --------- * Removed own icons. * No context menu outside all tabs. V0.5.0 --------- * Exported to Qt5 because Qt 5.4.2 seems OK. * Workaround for a Qt5 bug, which prevents insertion of the non-breaking space (zero-width non-joiner, ZWNJ) with SHIFT+SPACE. V0.4.9 --------- * Replaced "%U" with "%F" in the desktop file and used toLocalFile() if the file path is a URL. * In log files, the day number may only have one digit. V0.4.8 --------- * Use QSharedMemory, QLocalServer and QLocalSocket instead of QtSingleApplication to have a single-instance app with a simpler code. * Instead of adding a member variable to the window class, use the qApp macro to get the app. * Set window modality for the subdialogs of the print dialog too. * Don't open new tabs in minimized windows; respect the minimized state! * Use X11 functions for detecting the shaded state and unshading again because isMinimized() may not return true for shaded windows under all WMs. * Format urls and email addresses inside single-line comments too. * Format special notes inside comments. * Format qmake paths. * Some languages need backslash as the line ending for multiline quotes. * Remove server instance from previous crash. * Use documentMode. V0.4.7 --------- * Take into account some DEs that don't support _NET_CURRENT_DESKTOP. * Always use absoluteFilePath() when opening a file. * Use absolutePath() instead of dir().path() to show the path of the opened file as tooltip. * Do nothing in keyPressEvent() if the text is readonly. * Guarantee a fixed height for lineedits. * Instead of hiding and showing a window to resize it to the default size, reparent it with a dummy widget and take it out again to guarantee resizing under all DEs. V0.4.6 --------- * Faster mouse wheel scrolling when the mouse cursor is on the vertical scrollbar. * Use changeEvent() to get the window state because not all window managers trigger resizeEvent() when a window is unmaximized. * Rehighlight found matches after zooming out or changing font. * For returning to the default size to be possible under all circumstances, hide the window before resizing and show it again afterward. V0.4.5 --------- * Added syntax highlighting for HTML embedded JavaScript. * Added syntax highlighting for extra bash keywords. * Added syntax highlighting for srt subtitles and gtkrc. * A workaround for the scrollbar range(s) not being updated after zooming in the text. * To unshade the active window, it's enough to consider it minimized and then, restore and activate it. V0.4.4 --------- * Added HTML multiline comment highlighting. * Added syntax highlighting for makefile, cmake, qmake, troff, theme files and Ruby. V0.4.3 --------- * Code clean-up. * Unshade the active window when a tab is created or a file is opened in it. * Remove the settings for "max" and "fullscreen" when the window size isn't saved. V0.4.2 --------- * Added '/usr/lib/x86_64-linux-gnu/libX11.so' as a system library to the project to fix the new error messages "x11.o: undefined reference to symbol...". * Corrected highlighting of Bash keywords and also url patterns. * Show tab tooltips without delay. * Don't use setFixedSize() with dialogs because it may prevent them from being centered when shown. * Under KDE, when text is selected for the first time after starting FeatherPad, it isn't copied to the selection clipboard. Although I still don't know the cause (Klipper?), I found a workaround. V0.4.1 -------- * Added tab context menus for closing other tabs. * When text is selected, use the left and right arrow keys to go to the start and end of the selection respectively. * Use hasUrls() instead of hasFormat("text/plain") in dragEnterEvent() for DnD to work with all file managers. * When an empty file is opened in the current tab, open the next file in a new tab. V0.4.0 -------- * Made FeatherPad independent from any icon set. * Use an extra setTextCursor() in find() for the signal selectionChanged() be emitted (it's needed by the status bar). * Set the toolbar icon size explicitly to 22x22. * Made the status bar info selectable with mouse. * More complete email address pattern in quotation highlighting. * Fixed bugs in searching for multiline strings. V0.3.6 -------- * When highlighting found matches, search for them only inside the visible part of the text. * Fixed bugs in HTML highlighting. * No need to enforce a central position for dialogs anymore. V0.3.5 -------- * Restructured syntax highlighting. * Fixed a bug common to Highlighter::isQuoted() and Highlighter::isMLCommented(). * Fixed HTML highlighting. * Fixed a minor bug in CSS highlighting. * Fixed some bugs related to quotation and commenting out. * Don't disconnect the syntax highlighting signal in a QTextDocument when doing tab DND. V0.3.4 -------- * A more advanced way of CSS syntax highlighting (with error handling). V0.3.3 -------- * Fixed the CSS syntax highlighting. V0.3.2 -------- * Rehighlight found matches after text replacement because they may need correction. * Set style sheet only for the viewport of QPlainTextEdit. * Added icons for GTK+ based environments and also for root. * Always use raise() after activateWindow(). * Corrected a mistake, which had occurred during replacement of QLists with QHash. V0.3.1 -------- * Corrected the C single-line comment. * When opening a file, use the name of the currently opened file in the dialog. * When saving a deleted file, show the save-as dialog only if the file isn't restorable (because its containing folder is removed). * Disconnect everything connected to the signal modificationChanged() before setting text and reconnect them afterward. V0.3.0 -------- * Use QHash instead of QLists to set and get the needed info on each tab. * After a disastrous overwriting, I decided to use filters for saving as far as possible. V0.2.10 -------- * Added an option to Preferences for always showing the statusbar. * Format Apt's sources.list. * Removed duplicate QActions. V0.2.9 -------- * Yet faster highlighting of here-docs. * Don't reset the chosen encoding of a new document to UTF-8 with tab switching. * Offer saving before changing the encoding if the text of an opened file is modified. V0.2.8 -------- * Better and faster highlighting of here-docs. * To be able to open system files as well, use read() instead of getChar() for file opening. V0.2.7 -------- * It seems that highlighting of here-docs works now, although not efficiently. V0.2.6 -------- * A slightly better way for highlighting of here-documents. * Cleaned up the detection of escaped quotes. * Use link target to get mime type. V0.2.5 -------- * TextBlockData needed a destructor. * Syntax highlighting for Perl. * Only an odd number of backslashes before a quotation mark means that it's escaped. V0.2.4 --------- * Added parentheses and braces matching. V0.2.3 --------- * Suppose that only the script languages (Bash, Lua and Python) have both single and double quotes. V0.2.2 --------- * Added formatting of Bash "here documents". V0.2.1 --------- * Debugged and polished syntax highlighting. V0.2.0 --------- * Dropped using of source-highlight-qt and source-highlight; devised a heuristic method instead. V0.1.11 --------- * Included what was needed from source-highlight-qt in the source. * Show the number of replaced occurrences. V0.1.10 --------- * Fixed bugs in text highlighting. V0.1.9 --------- * If a tab with a readonly text is dropped, don't activate cut and delete menuitems. * No need to set the visibility of actionEdit when dropping tabs as it's set by tabChange(). * The tab detachment keyboard shortcut was ambiguous. * Set the tab width proportional to the font size. * Added 'About' dialog and 'Help'. * Use path of containing folder as tab tooltip and insert ellipsis for very long tooltips. * Fixed a silly bug in tab DND. * Write size to the config file only if necessary. * Fixed a little bug in size preference. * Enabled tooltips for inactive windows. V0.1.8 --------- * A better way of giving window modality to open and save dialogs, which bypasses the KDE bug related to the KGlobal-locale warning message. * No need to delete child widgets as they're deleted with their parents. * Added Preferences. V0.1.7 --------- * Added the number of selected characters to the status bar. V0.1.6 --------- * Use a docked window instead of replace dialog. * Fixed two bugs related to the clear shortcut and the clear button of LineEdit. V0.1.5 --------- * Added calculation of word numbers to the status bar. * It's more logical to keep a tab with empty document when another tab is dropped into its window. * Fixed a bug related to the enabled/disabled states of the reload button and menu item. V0.1.4 --------- * Simplified an X11 function (no need to get a list of all windows in the order of creation). * Always use QX11Info::display() instead of XOpenDisplay(NULL), otherwise there would be a memory leak. V0.1.3 --------- * Use closeTab() in detachTab(). * Prevent any possibility of memory leak by using appropriate destructors and returning QList instead of "Window*" from the X11 function List(). * Don't drop tab if the drop target has a modal dialog. * Open a window and not a tab if a FeatherPad window is on the same desktop but has a modal dialog. V0.1.2 --------- * Drop a dragged tab into the topmost FeatherPad window if the drop point is inside more than one window. * Don't add a new tab if the current tab of the drop target has no text and isn't modified. * Fixed a memory leak in the function whichDesktops(). V0.1.1 --------- * Tab drag-and-drop, including tab detachment and window merging, without using of Qt's DnD mechanism. * Fixed disappearance of green highlights when the yellow ones were repainted. * Better X11 functions. * Use window modality and not application modality for all dialogs. * Other minor fixes. V0.1.0 --------- * FeatherPad is reborn in Qt :) I tried to make it similar to its GTK+ predecessor but it became even better.