[pkg-lxqt-devel] Bug#998188: featherpad: Package new upstream release

Bastian Germann bage at debian.org
Sat Nov 20 23:33:18 GMT 2021


On Sat, 06 Nov 2021 14:41:43 +0000 "Amy Kos" <amy at disroot.org> wrote:
> Anyway, there is a serious ftbfs bug in old libfm-qt:
> https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=984102

The same uploader who provided a new featherpad version has also addressed libfm-qt.
But I do not know what to make of the symbols changes as I am not familiar with the library.

However, I just uploaded the NMU for featherpad from mentors to DELAYED/3. The debdiff is enclosed.
-------------- next part --------------
diff -Nru featherpad-0.17.1/ChangeLog featherpad-1.0.1/ChangeLog
--- featherpad-0.17.1/ChangeLog	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/ChangeLog	2021-10-15 02:56:34.000000000 +0200
@@ -1,3 +1,52 @@
+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.
diff -Nru featherpad-0.17.1/CMakeLists.txt featherpad-1.0.1/CMakeLists.txt
--- featherpad-0.17.1/CMakeLists.txt	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/CMakeLists.txt	2021-10-15 02:56:34.000000000 +0200
@@ -10,9 +10,15 @@
     set(CMAKE_INSTALL_PREFIX "/Applications")
   elseif(UNIX)
     set(CMAKE_INSTALL_PREFIX "/usr")
+  elseif(OS2)
+    set(CMAKE_INSTALL_PREFIX "/@unixroot/usr/")
   endif()
 endif()
 
 option(WITHOUT_X11 "Compiling without X11..." OFF)
+# OS/2 never has X11
+if (OS2)
+  option(WITHOUT_X11 "Compiling without X11..." ON)
+endif()
 
 add_subdirectory(featherpad)
diff -Nru featherpad-0.17.1/debian/changelog featherpad-1.0.1/debian/changelog
--- featherpad-0.17.1/debian/changelog	2021-01-07 13:24:10.000000000 +0100
+++ featherpad-1.0.1/debian/changelog	2021-10-30 11:19:55.000000000 +0200
@@ -1,3 +1,10 @@
+featherpad (1.0.1-0.1) unstable; urgency=medium
+
+  * Non-maintainer upload
+  * New upstream release (Closes: #998188).
+
+ -- S. 7 <severusseptimius7 at gmail.com>  Sat, 30 Oct 2021 05:19:55 -0400
+
 featherpad (0.17.1-1) unstable; urgency=medium
 
   * New upstream release.
diff -Nru featherpad-0.17.1/debian/control featherpad-1.0.1/debian/control
--- featherpad-0.17.1/debian/control	2021-01-07 13:24:10.000000000 +0100
+++ featherpad-1.0.1/debian/control	2021-10-30 11:19:55.000000000 +0200
@@ -4,27 +4,25 @@
            Andrew Lee (李健秋) <ajqlee at debian.org>
 Section: editors
 Priority: optional
-Build-Depends: debhelper-compat (= 12),
-               qtbase5-dev,
-               qt5-qmake,
+Build-Depends: debhelper-compat (= 13),
                libhunspell-dev,
+               libqt5svg5-dev,
+               libqt5x11extras5-dev,
                libx11-dev,
                libxext-dev,
-               libqt5x11extras5-dev,
-               libqt5svg5-dev,
+               qt5-qmake,
+               qtbase5-dev,
                qttools5-dev,
                qttools5-dev-tools
-Standards-Version: 4.4.1
+Standards-Version: 4.5.1
 Vcs-Browser: https://salsa.debian.org/lxqt-team/featherpad
 Vcs-Git: https://salsa.debian.org/lxqt-team/featherpad.git
 Homepage: https://github.com/tsujan/featherpad
 
 Package: featherpad
 Architecture: any
-Depends: ${shlibs:Depends},
-         ${misc:Depends}
-Recommends: featherpad-l10n,
-            libglib2.0-bin
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Recommends: featherpad-l10n, libglib2.0-bin
 Description: Lightweight Qt5 plain-text editor
  FeatherPad is a lightweight Qt5 plain-text editor for Linux. It is independent
  of any desktop environment and comes with all features one would expect in a
@@ -36,8 +34,7 @@
 Architecture: all
 Multi-Arch: foreign
 Section: localization
-Depends: ${misc:Depends},
-         qttranslations5-l10n
+Depends: qttranslations5-l10n, ${misc:Depends}
 Breaks: featherpad (<< 0.11.1)
 Replaces: featherpad (<< 0.11.1)
 Description: Language package for featherpad
diff -Nru featherpad-0.17.1/debian/copyright featherpad-1.0.1/debian/copyright
--- featherpad-0.17.1/debian/copyright	2021-01-07 13:17:53.000000000 +0100
+++ featherpad-1.0.1/debian/copyright	2021-10-30 11:19:55.000000000 +0200
@@ -3,7 +3,7 @@
 Source: https://github.com/tsujan/featherpad
 
 Files: *
-Copyright: 2014-2019, Pedram Pourang (aka Tsu Jan) <tsujan2000 at gmail.com>
+Copyright: 2014-2021, Pedram Pourang (aka Tsu Jan) <tsujan2000 at gmail.com>
 License: GPL-3.0+
 
 Files: featherpad/encoding.cpp
@@ -13,8 +13,13 @@
 
 Files: debian/*
 Copyright: 2017-2019, Alf Gaida <agaida at siduction.org>
+           2021, S. 7 <severusseptimius7 at gmail.com>
 License: GPL-3.0+
 
+Files: featherpad/data/featherpad.metainfo.xml
+Copyright: 2021, Balló György <https://github.com/City-busz>
+License: CC0-1.0
+
 License: GPL-2.0+
  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -48,3 +53,9 @@
  .
  On Debian systems, the complete text of the GNU General
  Public License version 3 can be found in "/usr/share/common-licenses/GPL-3".
+
+License: CC0-1.0
+ This file is under public domain.
+ .
+ On Debian systems, the complete text of the Creative Commons CC0 1.0 can be
+ found in "/usr/share/common-licenses/CC0-1.0".
diff -Nru featherpad-0.17.1/debian/featherpad.install featherpad-1.0.1/debian/featherpad.install
--- featherpad-0.17.1/debian/featherpad.install	2021-01-07 13:17:53.000000000 +0100
+++ featherpad-1.0.1/debian/featherpad.install	2021-10-30 11:19:55.000000000 +0200
@@ -1,4 +1,5 @@
 usr/bin/
-usr/share/featherpad/help
 usr/share/applications
+usr/share/featherpad/help
 usr/share/icons/hicolor
+usr/share/metainfo/
diff -Nru featherpad-0.17.1/debian/featherpad.lintian-overrides featherpad-1.0.1/debian/featherpad.lintian-overrides
--- featherpad-0.17.1/debian/featherpad.lintian-overrides	2021-01-07 13:17:53.000000000 +0100
+++ featherpad-1.0.1/debian/featherpad.lintian-overrides	1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-featherpad: binary-without-manpage usr/bin/featherpad
-featherpad: binary-without-manpage usr/bin/fpad
-
diff -Nru featherpad-0.17.1/featherpad/about.ui featherpad-1.0.1/featherpad/about.ui
--- featherpad-0.17.1/featherpad/about.ui	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/about.ui	2021-10-15 02:56:34.000000000 +0200
@@ -111,9 +111,13 @@
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Esperanto:</span> Tsu Jan (author)</p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">French:</span> <a href="mailto:cyrilusber2001 at yahoo.fr?Subject=My%20Subject">Cottet Cyril</a> <a href="https://github.com/cyrilus31">(cyrilus31 at GitHub)</a>, <a href="https://github.com/pols12">pols12 at GitHub</a>, <a href="https://github.com/LothaireCliquennois">LothaireCliquennois at GitHub</a></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Estonian:</span> Priit Jõerüüt</p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">German:</span> <a href="https://github.com/p8q">p8q at GitHub</a>, Alf Gaida <a href="https://github.com/agaida">(agaida at GitHub)</a>, Oliver Burkardt <a href="https://github.com/OliverBurkardt">(OliverBurkardt at GitHub)</a>, Florian Pigorsch (<a href="https://github.com/flopp">flopp at GitHub</a>)</p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Finnish:</span> <a href="https://github.com/Pyscowicz">Pyscowicz at GitHub</a>, Nikolay Korotkiy <a href="https://github.com/sikmir"><span;>(sikmir at GitHub)</a></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">French:</span> <a href="mailto:cyrilusber2001 at yahoo.fr?Subject=My%20Subject">Cottet Cyril</a> <a href="https://github.com/cyrilus31">(cyrilus31 at GitHub)</a>, <a href="https://github.com/pols12">pols12 at GitHub</a>, <a href="https://github.com/LothaireCliquennois">LothaireCliquennois at GitHub</a>, Baptiste H</p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">German:</span> <a href="https://github.com/p8q">p8q at GitHub</a>, Alf Gaida <a href="https://github.com/agaida">(agaida at GitHub)</a>, Oliver Burkardt <a href="https://github.com/OliverBurkardt">(OliverBurkardt at GitHub)</a>, Florian Pigorsch <a href="https://github.com/flopp">(flopp at GitHub)</a>, Roman Volak <a href="https://github.com/RomanVolak">(RomanVolak at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Greek:</span> <a href="https://github.com/IoannisLM">IoannisLM at GitHub</a>, <a href="https://github.com/algorithm314">algorithm314 at GitHub</a>, Dimitrios Glentadakis <a href="https://github.com/dglent"><span;>(dglent at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
@@ -127,11 +131,11 @@
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Japanese:</span> <a href="https://github.com/FuRuYa7">FuRuYa7 at GitHub</a>, Masamichi Ito <a href="https://github.com/ito32bit">(ito32bit at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Korean:</span> Seok Hyun, Ga <a href="https://github.com/shga89">(shga89 at GitHub)</a></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Korean:</span> Seok Hyun, Ga <a href="https://github.com/shga89">(shga89 at GitHub)</a>, JungHee Lee <a href="https://github.com/MarongHappy">(MarongHappy at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Lithuanian:</span> <a href="https://github.com/welaq">welaq at GitHub</a>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Norwegian:</span> Hans Fredrik Nordhaug <a href="https://github.com/hansfn">(hansfn at GitHub)</a>, Einar Mostad <a href="https://github.com/EinarMostad">(EinarMostad at GitHub)</a></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Norwegian:</span> Hans Fredrik Nordhaug <a href="https://github.com/hansfn">(hansfn at GitHub)</a>, Einar Mostad <a href="https://github.com/EinarMostad">(EinarMostad at GitHub)</a>, Allan Nordhøy <a href="https://github.com/comradekingu">(comradekingu at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Persian:</span> Novid Emami <a href="https://github.com/novid">(novid at GitHub)</a>, AatshG, Tsu Jan (author)</p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
@@ -139,7 +143,7 @@
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Portuguese:</span> Sérgio Marques <a href="https://github.com/smarquespt">(smarquespt at GitHub)</a>, Ruan O. Lima, Hugo Carvalho <a href="https://github.com/hugok79">(hugok79 at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Portuguese (Brazil):</span> <a href="https://github.com/eltonfabricio10">eltonfabricio10 at GitHub</a>, <a href="https://github.com/alexandrecoliveira">alexandrecoliveira at GitHub</a>, Ruan O. Lima, Erik Kierski <a href="https://github.com/erikferki">(erikferki at GitHub)</a></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Portuguese (Brazil):</span> <a href="https://github.com/eltonfabricio10">eltonfabricio10 at GitHub</a>, <a href="https://github.com/alexandrecoliveira">alexandrecoliveira at GitHub</a>, Ruan O. Lima, Erik Kierski <a href="https://github.com/erikferki">(erikferki at GitHub)</a>, <a href="https://github.com/Cristian-Willian-dos-Santos">Cristian-Willian-dos-Santos at GitHub</a>, Daniel Araujo Domingues <a href="https://github.com/dadomingues">(dadomingues at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Russian:</span> Vladimir Sharonin <a href="https://github.com/Survolog">(Survolog at GitHub)</a>, <a href="https://github.com/VaYurik">VaYurik at GitHub</a>, Pavel Shlyak <a href="https://github.com/shlyakpavel">(shlyakpavel at GitHub)</a>, Schwonder Reismus <a href="https://github.com/schw0reismus">(schw0reismus at GitHub)</a>, Николай Смольянинов <a href="https://github.com/smolnp">(smolnp at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
@@ -147,7 +151,9 @@
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
 <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Spanish:</span> <a href="https://github.com/micrococo">micrococo at GitHub</a>, Maximiliano Dvyhailo <a href="https://github.com/MaxiDvy"><span;>(MaxiDvy at GitHub)</a>, Robert Schneider, Adolfo Jayme-Barrientos <a href="https://github.com/fitojb">(fitojb at GitHub)</a></p>
 <p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Turkish:</span> Abdullah Ramazanoğlu <a href="https://github.com/aramazano">(ramazano at GitHub)</a>, Dr. Ayhan YALÇINSOY <a href="https://github.com/ayhanyalcinsoy">(ayhanyalcinsoy at GitHub)</a>, Mehmet Akif <a href="https://github.com/madanadam">(madanadam at GitHub)</a></p></body></html></string>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Turkish:</span> Abdullah Ramazanoğlu <a href="https://github.com/aramazano">(ramazano at GitHub)</a>, Dr. Ayhan YALÇINSOY <a href="https://github.com/ayhanyalcinsoy">(ayhanyalcinsoy at GitHub)</a>, Mehmet Akif <a href="https://github.com/madanadam">(madanadam at GitHub)</a>, <a href="https://github.com/oltulu">oltulu at GitHub</a></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Ukrainian:</span> Ihor Hordiichuk <a href="https://github.com/IhorHordiichuk">(IhorHordiichuk at GitHub)</a>, Taras Panchenko <a href="https://github.com/TarasPanchenko">(TarasPanchenko at GitHub)</a></p></body></html></string>
          </property>
          <property name="openExternalLinks">
           <bool>true</bool>
diff -Nru featherpad-0.17.1/featherpad/CMakeLists.txt featherpad-1.0.1/featherpad/CMakeLists.txt
--- featherpad-0.17.1/featherpad/CMakeLists.txt	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/CMakeLists.txt	2021-10-15 02:56:34.000000000 +0200
@@ -16,6 +16,12 @@
 # optional localization
 find_package(Qt5LinguistTools QUIET)
 
+# OS/2 needs an additional lib and tune the processor
+if(OS2)
+  #add_definitions(-mtune=${CMAKE_SYSTEM_PROCESSOR} -march=${CMAKE_SYSTEM_PROCESSOR})
+  set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -lcx")
+endif()
+
 # X11 for Linux/Unix
 if(NOT WITHOUT_X11 AND UNIX AND NOT APPLE AND NOT HAIKU)
   find_package(Qt5X11Extras "${QT_MINIMUM_VERSION}" REQUIRED)
@@ -56,7 +62,7 @@
 
 if(HAIKU)
   add_definitions(-DDATADIR="${CMAKE_INSTALL_PREFIX}/data")
-elseif(UNIX)
+elseif(UNIX OR OS2)
   add_definitions(-DDATADIR="${CMAKE_INSTALL_PREFIX}/share")
 endif()
 
@@ -69,19 +75,12 @@
     lineedit.cpp
     textedit.cpp
     tabbar.cpp
-    highlighter.cpp
     find.cpp
     replace.cpp
     pref.cpp
     config.cpp
     brackets.cpp
     syntax.cpp
-    highlighter-sh.cpp
-    highlighter-css.cpp
-    highlighter-html.cpp
-    highlighter-patterns.cpp
-    highlighter-regex.cpp
-    highlighter-perl-regex.cpp
     vscrollbar.cpp
     loading.cpp
     printing.cpp
@@ -92,7 +91,22 @@
     sidepane.cpp
     svgicons.cpp
     spellChecker.cpp
-    spellDialog.cpp)
+    spellDialog.cpp
+    highlighter/highlighter.cpp
+    highlighter/highlighter-css.cpp
+    highlighter/highlighter-fountain.cpp
+    highlighter/highlighter-java.cpp
+    highlighter/highlighter-json.cpp
+    highlighter/highlighter-html.cpp
+    highlighter/highlighter-markdown.cpp
+    highlighter/highlighter-pascal.cpp
+    highlighter/highlighter-patterns.cpp
+    highlighter/highlighter-perl-regex.cpp
+    highlighter/highlighter-regex.cpp
+    highlighter/highlighter-rest.cpp
+    highlighter/highlighter-ruby.cpp
+    highlighter/highlighter-sh.cpp
+    highlighter/highlighter-yaml.cpp)
 
 if(NOT WITHOUT_X11 AND UNIX AND NOT APPLE AND NOT HAIKU)
   set(featherpad_SRCS ${featherpad_SRCS} x11.cpp)
@@ -100,7 +114,14 @@
 
 set(featherpad_RESOURCES data/fp.qrc)
 set(DESKTOP_FILE data/featherpad.desktop)
-set(ICON_FILE data/featherpad.svg)
+set(METAINFO_FILE data/featherpad.metainfo.xml)
+if(NOT OS2)
+  set(ICON_FILE data/featherpad.svg)
+else()
+  enable_language(RC)
+  set_source_files_properties(data/featherpad_os2.rc PROPERTIES LANGUAGE RC)
+  set(featherpad_SRCS ${featherpad_SRCS} data/featherpad_os2.rc)
+endif()
 set(HELP_FILE data/help)
 file(GLOB HELP_TR_FILES data/help_*)
 
@@ -119,7 +140,7 @@
     install(FILES ${QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/translations")
   elseif(APPLE)
     SET_SOURCE_FILES_PROPERTIES(${QM_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources/translations)
-  elseif(UNIX)
+  elseif(UNIX OR OS2)
     install(FILES ${QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/featherpad/translations")
   endif()
 else(Qt5LinguistTools_FOUND)
@@ -164,10 +185,19 @@
 
   install(TARGETS featherpad RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
   install(FILES ${DESKTOP_FILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications")
+  install(FILES ${METAINFO_FILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/metainfo")
   install(FILES ${ICON_FILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps")
   install(FILES ${HELP_FILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/featherpad")
   # also install translated help files
   install(FILES ${HELP_TR_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/featherpad")
   # install symlink
   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fpad DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
+elseif(OS2)
+  SET_TARGET_PROPERTIES(featherpad PROPERTIES
+  	OS2_DEF_EXEType "WINDOWAPI"
+  )
+  install(TARGETS featherpad RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
+  install(FILES ${HELP_FILE} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/featherpad")
+  # also install translated help files
+  install(FILES ${HELP_TR_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/featherpad")
 endif()
diff -Nru featherpad-0.17.1/featherpad/config.cpp featherpad-1.0.1/featherpad/config.cpp
--- featherpad-0.17.1/featherpad/config.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/config.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -62,6 +62,7 @@
     pastePaths_ (false),
     closeWithLastTab_ (false),
     sharedSearchHistory_ (false),
+    disableMenubarAccel_ (false),
     vLineDistance_ (-80),
     tabPosition_ (0),
     maxSHSize_ (2),
@@ -175,6 +176,9 @@
     if (settings.value ("sharedSearchHistory").toBool())
         sharedSearchHistory_ = true; // false by default
 
+    if (settings.value ("disableMenubarAccel").toBool())
+        disableMenubarAccel_ = true; // false by default
+
     settings.endGroup();
 
     /************
@@ -440,6 +444,7 @@
     settings.setValue ("nativeDialog", nativeDialog_);
     settings.setValue ("closeWithLastTab", closeWithLastTab_);
     settings.setValue ("sharedSearchHistory", sharedSearchHistory_);
+    settings.setValue ("disableMenubarAccel", disableMenubarAccel_);
 
     settings.endGroup();
 
@@ -698,7 +703,7 @@
         defaultLightSyntaxColors_.insert ("quote", QColor (Qt::darkGreen));
         defaultLightSyntaxColors_.insert ("type", QColor (Qt::darkMagenta));
         defaultLightSyntaxColors_.insert ("keyWord", QColor (Qt::darkBlue));
-        defaultLightSyntaxColors_.insert ("number", QColor (160, 80, 0));
+        defaultLightSyntaxColors_.insert ("number", QColor (150, 85, 0));
         defaultLightSyntaxColors_.insert ("regex", QColor (150, 0, 0));
         defaultLightSyntaxColors_.insert ("xmlElement", QColor (126, 0, 230));
         defaultLightSyntaxColors_.insert ("cssValue", QColor (0, 110, 110));
@@ -710,7 +715,7 @@
         defaultDarkSyntaxColors_.insert ("quote", QColor (Qt::green));
         defaultDarkSyntaxColors_.insert ("type", QColor (255, 153, 255));
         defaultDarkSyntaxColors_.insert ("keyWord", QColor (65, 154, 255));
-        defaultDarkSyntaxColors_.insert ("number", QColor (255, 200, 0));
+        defaultDarkSyntaxColors_.insert ("number", QColor (255, 205, 0));
         defaultDarkSyntaxColors_.insert ("regex", QColor (255, 160, 0));
         defaultDarkSyntaxColors_.insert ("xmlElement", QColor (255, 255, 1));
         defaultDarkSyntaxColors_.insert ("cssValue", QColor (150, 255, 0));
diff -Nru featherpad-0.17.1/featherpad/config.h featherpad-1.0.1/featherpad/config.h
--- featherpad-0.17.1/featherpad/config.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/config.h	2021-10-15 02:56:34.000000000 +0200
@@ -507,6 +507,13 @@
         sharedSearchHistory_ = share;
     }
 /*************************/
+    bool getDisableMenubarAccel() const {
+        return disableMenubarAccel_;
+    }
+    void setDisableMenubarAccel (bool disable) {
+        disableMenubarAccel_ = disable;
+    }
+/*************************/
     QString getDictPath() const {
         return dictPath_;
     }
@@ -592,7 +599,8 @@
          selectionHighlighting_,
          pastePaths_,
          closeWithLastTab_,
-         sharedSearchHistory_;
+         sharedSearchHistory_,
+         disableMenubarAccel_;
     int vLineDistance_,
         tabPosition_,
         maxSHSize_,
diff -Nru featherpad-0.17.1/featherpad/data/featherpad.desktop featherpad-1.0.1/featherpad/data/featherpad.desktop
--- featherpad-0.17.1/featherpad/data/featherpad.desktop	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/featherpad.desktop	2021-10-15 02:56:34.000000000 +0200
@@ -5,6 +5,7 @@
 GenericName[da]=Tekstredigering
 GenericName[es]=Editor de texto
 GenericName[eo]=Tekst-Redaktilo
+GenericName[fa]=ويرايشگر متن
 GenericName[hu]=Szövegszerkesztő
 GenericName[ja_JP]=テキストエディタ(Qt)
 GenericName[pl]=Edytor tekstu
@@ -17,6 +18,7 @@
 Comment[da]=Letvægts Qt-tekstredigering
 Comment[es]=Editor de texto ligero basado en Qt
 Comment[eo]=Malpeza tekst-redaktilo bazita sur Qt
+Comment[fa]=ويرايشگر سبک متن
 Comment[hu]=Gyors szövegszerkesztő Qt-ben
 Comment[ja_JP]=軽量 Qt テキストエディタ
 Comment[pl]=Lekki edytor tekstu oparty na Qt
@@ -39,11 +41,14 @@
 Name[cs]=Nové okno
 Name[de]=Neues Fenster
 Name[eo]=Nova Fenestro
+Name[fa]=پنجره‌ی جديد
 Name[hu]=Új ablak
 Name[pt]=Nova Janela
 Exec=featherpad --win
 
 [Desktop Action standalone-window]
 Name=Standalone Window
+Name[de]=Eigenständiges Fenster
 Name[eo]=Memstara Fenestro
+Name[fa]=پنجره‌ی مستقل
 Exec=featherpad --standalone
diff -Nru featherpad-0.17.1/featherpad/data/featherpad.metainfo.xml featherpad-1.0.1/featherpad/data/featherpad.metainfo.xml
--- featherpad-0.17.1/featherpad/data/featherpad.metainfo.xml	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/featherpad.metainfo.xml	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+  <id>com.github.FeatherPad</id>
+  <launchable type="desktop-id">featherpad.desktop</launchable>
+  <name>FeatherPad</name>
+  <summary>Lightweight Qt plain text editor</summary>
+  <metadata_license>CC0-1.0</metadata_license>
+  <project_license>GPL-3.0</project_license>
+  <description>
+    <p>FeatherPad is a lightweight Qt5 plain-text editor for Linux. It is independent of any desktop environment and has:</p>
+    <ul>
+      <li>Drag-and-drop support, including tab detachment and attachment</li>
+      <li>X11 virtual desktop awareness (using tabs on current desktop but opening a new window on another)</li>
+      <li>An optionally permanent search-bar with a different search entry for each tab</li>
+      <li>Instant highlighting of found matches when searching</li>
+      <li>A docked window for text replacement</li>
+      <li>Support for showing line numbers and jumping to a specific line</li>
+      <li>Optional selection highlighting</li>
+      <li>Automatic detection of text encoding as far as possible and optional saving with encoding</li>
+      <li>Syntax highlighting for common programming languages</li>
+      <li>Ability to open URLs with appropriate applications</li>
+      <li>Session management</li>
+      <li>Side-pane mode</li>
+      <li>Auto-saving</li>
+      <li>Spell checking with Hunspell</li>
+      <li>Printing</li>
+      <li>Text zooming</li>
+      <li>Appropriate but non-interrupting prompts</li>
+      <li>Other features that can be found in its settings, on its menus or when it is actually used.</li>
+    </ul>
+  </description>
+  <screenshots>
+    <screenshot type="default">
+      <image>https://raw.githubusercontent.com/tsujan/FeatherPad/master/screenshots/Tabs.png</image>
+    </screenshot>
+    <screenshot>
+      <image>https://raw.githubusercontent.com/tsujan/FeatherPad/master/screenshots/Side-Pane.png</image>
+    </screenshot>
+  </screenshots>
+  <url type="bugtracker">https://github.com/tsujan/FeatherPad/issues</url>
+  <url type="homepage">https://github.com/tsujan/FeatherPad</url>
+  <developer_name>Pedram Pourang, a.k.a. Tsu Jan</developer_name>
+  <update_contact>tsujan2000 at gmail.com</update_contact>
+  <translation type="qt">featherpad</translation>
+</component>
Binärdateien /tmp/4E3iWTFKa6/featherpad-0.17.1/featherpad/data/featherpad_os2.ico und /tmp/3o7UAzjb0T/featherpad-1.0.1/featherpad/data/featherpad_os2.ico sind verschieden.
diff -Nru featherpad-0.17.1/featherpad/data/featherpad_os2.rc featherpad-1.0.1/featherpad/data/featherpad_os2.rc
--- featherpad-0.17.1/featherpad/data/featherpad_os2.rc	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/featherpad_os2.rc	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,2 @@
+ICON 1 data\featherpad_os2.ico
+
diff -Nru featherpad-0.17.1/featherpad/data/fp.qrc featherpad-1.0.1/featherpad/data/fp.qrc
--- featherpad-0.17.1/featherpad/data/fp.qrc	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/fp.qrc	2021-10-15 02:56:34.000000000 +0200
@@ -29,6 +29,7 @@
     <file>icons/go-next.svg</file>
     <file>icons/go-previous.svg</file>
     <file>icons/go-up.svg</file>
+    <file>icons/hasTarget.svg</file>
     <file>icons/help-about.svg</file>
     <file>icons/help-contents.svg</file>
     <file>icons/link.svg</file>
diff -Nru featherpad-0.17.1/featherpad/data/help featherpad-1.0.1/featherpad/data/help
--- featherpad-0.17.1/featherpad/data/help	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/help	2021-10-15 02:56:34.000000000 +0200
@@ -46,7 +46,7 @@
 
 Files are always opened after the active tab unless it is empty, in which case the first file will be opened in it. If a single file is opened, its tab will be activated but in the case of multiple files, the active tab will not change.
 
-If a file is opened multiple times, its second (third, ... ) instance will be uneditable by default and will have a light yellow or dark red background, depending on whether the default or the dark color scheme is used. To make it editable, click on the newly created 'Edit' button on the toolbar or the 'Edit' menu. After that, these two buttons will disappear again.
+If a file is opened multiple times, its second (third, …) instance will be uneditable by default and will have a light yellow or dark red background, depending on whether the default or the dark color scheme is used. To make it editable, click on the newly created 'Edit' button on the toolbar or the 'Edit' menu. After that, these two buttons will disappear again.
 
 If the opened file is a symbolic link (symlink), the context menu of its tab will have two extra items for copying its target path and opening its target inside the current window.
 
@@ -62,7 +62,7 @@
 
 FeatherPad also has a side-pane mode, which can be enabled either temporarily or with startup. It is most suitable for working with sessions because its file list is alphabetically ordered and can be filtered. Each pane item has a right-click menu, which contains menu-items for various jobs when there is more than one page. Items can also be removed by middle-clicking without being selected.
 
-The side-pane mode does not have features provided by tabs -- for example, tab drag-and-drop is missing from it -- and conversely -- for example, tabs are not sorted and cannot be filtered -- but the side-pane and tab modes can be used interchangeably through the Side-Pane menu-item or its shortcut and also by middle-clicking an empty space inside the tab-bar or side-pane.
+The side-pane mode does not have features provided by tabs — for example, tab drag-and-drop is missing from it — and conversely — for example, tabs are not sorted and cannot be filtered — but the side-pane and tab modes can be used interchangeably through the Side-Pane menu-item or its shortcut and also by middle-clicking an empty space inside the tab-bar or side-pane.
 
 The side-pane can be opened by its shortcut (Ctrl+Alt+P by default). If it is already open but does not have focus, the same shortcut focuses it and, if it has focus, the shortcut closes it.
 
@@ -94,7 +94,7 @@
 *   Searching and Replacing   *
 *******************************
 
-In FeatherPad, searching and replacing are done by separate widgets for the user to be able to search one string and replace another. Moreover, a separate replacement widget removes the danger of an unintentional replacement.
+In FeatherPad, searching and replacing are done by separate widgets for the user to be able to search one string and replace another. Moreover, a separate replacement widget may prevent an unintentional replacement.
 
 To remove the yellow highlights after finishing a search, you could
 
@@ -103,7 +103,11 @@
 * Empty the search entry and press Enter or F3 in it, or
 * Hide the search bar by focusing it (with Ctrl+F) and then, pressing Ctrl+F (again).
 
-Each search entry has a search history that can be shown as a popup list by clicking its arrow or by pressing Ctrl+Up/Down when it has focus. The topmost item shows the most recent searched text. When the entry has focus, up and down arrow keys can be used for selecting history items without showing the popup list.
+Each search entry has a search history that can be shown as a popup list by clicking its arrow or by pressing Ctrl+Up/Down when it has focus. The topmost item shows the most recent searched text. When the entry has focus, Up and Down arrow keys as well as PageUp and PageDown keys can be used for selecting history items without showing the popup list: Up and Down change the selection by one item, while PageUp and PageDown select the topmost (most recent) and bottommost (oldest) items respectively.
+
+FeatherPad can use a shared history for all search entries, whether they are in the same window or in different windows of the same FeatherPad process. By default, each search entry has a separate history but that can be changed by checking "Preferences → Window → Use a shared search history".
+
+The shared search history starts with every session and is forgotten as soon as the session ends (i.e., when all windows are closed — there is no point in remembering the search history indefinitely).
 
 The 'Replace' docked window respects the settings for 'Match Case', 'Whole Word' and 'Regular Expression' on the search bar (in the last case, the matching text should be a regular expression, while the replacing text is always an ordinary string). It can be detached from and reattached to the main window at top or bottom. To remove the green highlights after replacing text, you could either hide/close the 'Replace' docked window or do as in the case of removing yellow search highlights.
 
@@ -137,15 +141,19 @@
 *   Wheel Scrolling   *
 ***********************
 
-For fast mouse wheel scrolling, put the cursor on the scrollbar. If it is inside the text view, the speed of wheel scrolling will be normal. If, in addition, the Shift key is pressed, the text will scroll one line per wheel turn.
+If the cursor is inside the text view, the speed of (mouse) wheel scrolling will be normal. If, in addition, the Shift key is pressed, the text will scroll one line per wheel turn.
 
 "Inertial" scrolling can be enabled in the Text section of the Preferences dialog. It creates a kind of inertia with wheel scrolling when the cursor is inside the text view.
 
+For fast wheel scrolling, put the cursor on the vertical scrollbar. Then, each step of wheel turn moves the view by one page. If the Shift key is also pressed, the view will be moved by half the page.
+
+Also, see the section Keyboard Shortcuts → Scrolling, below.
+
 ********************
 *   Text Tabbing   *
 ********************
 
-The (selected multi-line) text can be tabbed by the Tab key and untabbed by Shift+Tab.
+A single text line could be tabbed by the Tab key and untabbed by Shift+Tab (which is also called "BackTab") if the cursor is at its start. If multiple lines are (partially) selected, Tab and BackTab will affect all of them, regardless of the cursor position.
 
 If Ctrl+Tab is used, the tabulation will be done by 4 spaces instead of a tab (the number of spaces can be changed in the Preferences dialog). This is sometimes called "soft tab".
 
@@ -193,6 +201,8 @@
 
 All shortcuts, except for the extra ones below, can be found on menus or as tooltips and many of them can be customized in the Preferences dialog.
 
+NOTE: Text editing shortcuts may be different for non-Linux OS's.
+
 Useful Extra (Hidden) Shortcuts:
 =================================
 
@@ -214,8 +224,10 @@
 
 Scrolling:
 ***********
-Shift+Mouse Wheel   Scroll up/down by one wrapped line with mouse wheel
-Ctrl+Up/Down        Scroll up/down by one wrapped line without moving text cursor
+Shift+Mouse Wheel     If cursor is inside view, scroll up/down by one wrapped line;
+                      if cursor is on vertical scrollbar, scroll up/down by half the page
+Ctrl+Up/Down          Scroll up/down by one wrapped line without moving text cursor
+Ctrl+PageUp/PageDown  Scroll up/down by one page without moving text cursor
 
 Moving text cursor:
 ********************
@@ -229,6 +241,7 @@
 Shift+Up/Down       Go to the same position in the previous/next wrapped line while selecting text
 Meta+Up/Down        Go to the same position in the previous/next (real) line
 Meta+Shift+Up/Down  Go to the same position in the previous/next (real) line while selecting text
+PageUp/PageDown     Go to the same position in the previous/next page
 
 Text tabulation:
 *****************
@@ -242,8 +255,18 @@
 **************
 Insert              Toggle overwrite mode
 Backspace           Delete to the left of the text cursor
+Ctrl+Backspace      Delete to the the start of the word
 Delete              Delete to the right of the text cursor (the opposite of Backspace)
+Ctrl+Delete         Delete to the end of the word (the opposite of Ctrl+Backspace)
 Ctrl+K              Delete to the end of the line (when the editor has focus)
 Ctrl+Shift+Up/Down  Move the current line or selected lines upward/downward
 Shift+Enter         Insert newline with the non-letter prefix of the current line
                     (to write code comments or lists easily, for example)
+
+***********************
+*   Multiple Clicks   *
+***********************
+
+Double click          Select a whole word
+Triple click          Select a line without its leading and trailing whitespaces
+Ctrl + Triple click   Select a whole line plus its trailing newline if any
diff -Nru featherpad-0.17.1/featherpad/data/icons/application-menu.svg featherpad-1.0.1/featherpad/data/icons/application-menu.svg
--- featherpad-0.17.1/featherpad/data/icons/application-menu.svg	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/icons/application-menu.svg	2021-10-15 02:56:34.000000000 +0200
@@ -1,4 +1,4 @@
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
 <defs id="defs1">
 <style type="text/css" id="current-color-scheme">
 .ColorScheme-Text {
@@ -6,5 +6,5 @@
 }
 </style>
 </defs>
-<path style="fill:currentColor;fill-opacity:1;stroke:none" id="rect819" d="M 1,1 V 15 H 15 V 1 Z M 3,3 H 13 V 5 H 3 Z M 3,7 H 13 V 9 H 3 Z m 0,4 h 10 v 2 H 3 Z" class="ColorScheme-Text"/>
+<path style="fill:currentColor;fill-opacity:1;stroke:none" d="M 2 3 L 2 5 L 14 5 L 14 3 L 2 3 z M 2 7 L 2 9 L 14 9 L 14 7 L 2 7 z M 2 11 L 2 13 L 14 13 L 14 11 L 2 11 z " class="ColorScheme-Text"/>
 </svg>
diff -Nru featherpad-0.17.1/featherpad/data/icons/case.svg featherpad-1.0.1/featherpad/data/icons/case.svg
--- featherpad-0.17.1/featherpad/data/icons/case.svg	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/icons/case.svg	2021-10-15 02:56:34.000000000 +0200
@@ -6,5 +6,5 @@
 }
 </style>
 </defs>
-<path style="fill:currentColor;fill-opacity:1;stroke:none" id="path4" d="m 14,1 v 0.771484 c -0.549194,-0.493827 -1.26133,-0.767993 -2,-0.769531 -1.65685,0 -3,1.34173 -3,2.99805 4e-06,1.65632 1.34315,3 3,3 0.738412,0 1.45052,-0.27446 2,-0.767578 v 0.765625 h 1 v -5.99805 h -1 z  m -2,1.002 c 1.10457,1e-07 2,0.893836 2,1.99805 -3e-06,1.10421 -0.895432,2 -2,2 -1.10457,-1e-07 -2,-0.895789 -2,-2 3e-06,-1.10421 0.895432,-1.99805 2,-1.99805 z  m -6.6172,1.998 l -4.3828,11 h 1.35742 l 1.1895,-3 h 4.92773 l 1.1523,3 h 1.37305 l -4.252,-11 h -1.36523 z  m .6797,1.3281 c 0.11316,0.37608 0.711475,2.08196 1.79688,5.11523 l .2246,.5566 h -4.14258 l 2.1211,-5.6719 z " class="ColorScheme-Text"/>
+<path style="fill:currentColor;fill-opacity:1;stroke:none" id="path4" d="M 14,1 V 1.771484 C 13.450806,1.277657 12.73867,1.003491 12,1 c -1.65685,0 -3,1.34173 -3,3 0,1.65632 1.34315,3 3,3 0.738412,0 1.45052,-0.27446 2,-0.767578 V 7 h 1 V 1 Z m -2,1.002 c 1.10457,0 2,0.893836 2,2 0,1.10421 -0.895432,2 -2,2 -1.10457,0 -2,-0.895789 -2,-2 0,-1.10421 0.895432,-2 2,-2 z M 5.3828,4 1,15 h 1.35742 l 1.1895,-3 h 4.92773 l 1.1523,3 H 11 L 6.748,4 Z m 0.6797,1.3281 2.02148,5.67183 H 3.9414 Z" class="ColorScheme-Text"/>
 </svg>
diff -Nru featherpad-0.17.1/featherpad/data/icons/hasTarget.svg featherpad-1.0.1/featherpad/data/icons/hasTarget.svg
--- featherpad-0.17.1/featherpad/data/icons/hasTarget.svg	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/icons/hasTarget.svg	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,4 @@
+<svg width="48" version="1.1" xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 0 48 48">
+<path style="fill:#fff" d="m 27.8024,3.2948 c -0.25,-0.25 -0.461574,-0.487478 -0.922552,-0.85626 -0.460979,-0.368784 -1.44743,-1.06342 -2.90576,-1.06342 -1.45834,0 -2.44479,0.69464 -2.90576,1.06342 -0.460979,0.368784 -0.672553,0.606262 -0.922551,0.85626 l -16.001,16.001 c -0.986053,0.986054 -1.69175,2.78403 -1.35069,4.36694 0.170532,0.791455 0.521759,1.49454 1.10485,2.11579 0.583096,0.621251 1.4226,1.34654 3.07564,1.34654 h 8 v 14.4989 c 0,0 -0.05513,1.08575 0.546905,2.28981 0.602025,1.20405 2.62061,2.71103 4.45394,2.71104 h 8.09899 c 1.83333,0 3.85191,-1.50698 4.45394,-2.71104 0.602025,-1.20405 0.546905,-2.28981 0.546905,-2.28981 v -14.4989 h 7.89952 c 2.23277,0 3.98211,-1.89262 4.26335,-3.67778 0.281244,-1.78516 -0.546863,-3.26481 -1.43355,-4.1515 z "/>
+<path style="fill:#323232" d="m 40.9741,23.1243 c 0.3,0 0.531377,-0.468622 0,-1 l -16,-16 c -1,-1 -1,-1 -2,0 l -16,16 c -0.5190881,0.519088 -0.2,1 0,1 h 12 v 18.5006 c 0,0 0,1 1,1 h 8 c 1,0 1,-1 1,-1 V 23.1243 Z"/>
+</svg>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_ar_DZ.ts featherpad-1.0.1/featherpad/data/translations/featherpad_ar_DZ.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_ar_DZ.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_ar_DZ.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation></translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation></translation>
     </message>
@@ -65,9 +65,9 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation></translation>
     </message>
@@ -134,7 +134,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation></translation>
     </message>
@@ -609,9 +609,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation></translation>
     </message>
@@ -797,449 +797,461 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform></numerusform>
@@ -1251,12 +1263,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation></translation>
     </message>
@@ -1264,13 +1276,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1434,63 +1446,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1498,17 +1521,17 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1517,12 +1540,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1530,141 +1553,141 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1678,32 +1701,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation></translation>
     </message>
@@ -1713,7 +1736,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1721,57 +1744,57 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1783,13 +1806,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1801,13 +1824,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1816,8 +1839,8 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1827,84 +1850,84 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1914,96 +1937,96 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation></translation>
     </message>
@@ -2019,111 +2042,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2131,38 +2154,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation></translation>
     </message>
@@ -2314,7 +2337,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation></translation>
     </message>
@@ -2360,7 +2383,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_bg.ts featherpad-1.0.1/featherpad/data/translations/featherpad_bg.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_bg.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_bg.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Лиценз</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Неозаглавен</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Опции</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Кодиране</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Запазване</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Заместване</translation>
     </message>
@@ -798,449 +798,461 @@
         <translation>Заместване на всички</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Последно отва&ряни</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Затваряне</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Да се запазят ли промените?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Моля, посетете този прозорец или просто затворете диалога му!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Документът беше модифициран.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Отхвърляне на промените</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>О&тказ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Не за всички</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Незапазен</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Редове</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Изб. Символ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Думи</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>В този раздел се изпълнява друг процес!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Скрипт</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Друг FeatherPad прозорец има модален диалог!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Позиция:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Нормална</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Файлът не съществува.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Отваряне на връзка</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Копиране на връзка</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>На един раздел е разрешен само един процес.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Изход на скрипта</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Изчистване</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad не отваря файлове, по-големи от 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Нетекстов файл не се отвори!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Виж Предпочитания →Файлове → Не се разрешава отваряне на нетекстови файлове</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Някои файлове не можаха да бъдат отворени!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Може да нямате разрешение за четене.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Файл, неподлежащ на редактиране!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Нетекстови файлове или файлове с огромни редове не могат да се редактират.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Предишен срив е засечен!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Препоръчително е да се затворят всички прозорци на FeatherPad и да се започне отначало!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Изпълняване като администратор</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Всички файлове (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Всички файлове (*);;.%1 Файлове (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Отваряне на файл...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Файлове (*.%1);;Всички файлове (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Запазване като...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Запазване с кодирането като...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Запазване като администратор.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Изчаква се удостоверяване ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" не е намерен. Моля инсталирайте Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Да</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Не</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Отказ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Искате ли да използвате <b>MS Windows</b> край на ред?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Това може да е по-добре за четене под MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Не може да бъде запазено!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Помощ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Синтаксис</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Голям по размер файл не се отвори!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Текстовите табулатори се конвертираха в интервали.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Селектираният текст беше твърде дълъг.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Той не е напълно обработен.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Този файл е модифициран другаде или по друг начин!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Моля, бъдете внимателни при презареждането или запазването на този документ!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>В процес на принтиране...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Принтиране на документ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Принтирането е завършено.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Страници</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Копиране път на целта</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Отваряне на целта тук</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Отваряне на съдържащата папка</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Необходимо е добавяне на Hunspell речник.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Виж Предпочитания →Текст→ Проверка на правописа!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell речник не е наличен.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell речникът няма придружаващ affix файл.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Не са открити правописни грешки в документа.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Не са открити правописни грешки от текстовия курсор.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Проверка на правопис</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Някои файлове не могат да се запазят!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Преводачи</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Лек и икономичен на ресурси редактор на обикновен текст с възможност за обработка на множество файлове в раздели</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>базиран на Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Автор</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Относно FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Без заместване</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Едно заместване</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln заместване</numerusform>
@@ -1248,12 +1260,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Първите 1000 замествания са подчертани.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Превишен е размерът на лимита за подчертаване на синтаксиса.</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1434,64 +1446,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>&Скриване на лентата за търсене по подразбиране</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>По подразбиране всеки запис за търсене
 има отделна история на търсенията.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Използване на споделена история на търсенето</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Показване на &лентата на състоянието винаги</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Показване позицията на курсора в лентата на състоянието</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Ефектът ще настъпи след затварянето на този диалог.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Позиция на лентата на разделите : </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Север</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Юг</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Запад</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Изток</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1502,17 +1525,17 @@
 Навигацията в раздела със скрола на мишката не е засегната.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Прев&ъртане на отворените раздели с клавиатурата</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Затваряне на прозореца при затваряне на последния раздел</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1525,12 +1548,12 @@
 съобщават, че имат множество работни плотове.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Отваряне на новите файлове винаги в нов прозорец</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1541,32 +1564,32 @@
 Някои среди на работния плот, като KDE и LXQt, предоставят собствени диалогови прозорци за файлове.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Нативен файлов диалог</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>При отмяна на селецията ще се използва Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Запомняне на &шрифт</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Това обхваща скоби, фигурни скоби, квадратни скоби и кавички.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Автоматизиране на скобите</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1574,113 +1597,113 @@
 многоточието да се заменя с елипса и двойното тире с дълго тире.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Заменяне на многоточието с елипса и двойното тире с дълго тире</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Подчертаване на съвпаденията по регистър и цяла дума на избрания текст.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Подчертаване на селекцията при търсене</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Никога да не подчертава синтаксисът за следните файлове > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Това създава бутон за меню на
 лентата на състоянието за промяна на синтаксиса.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Поддръжка на заместване на синтаксиса</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Показване на интервали, табулатори и линии,
 когато е подчертан синтаксисът.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Показване на интервалите</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Линиите на вертикалното положение ще бъдат показвани, само ако
 шрифтът на редактора е от тип фиксиран (като Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Показване на линиите на вертикално положение от тази позиция:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Показване на края на ред и документ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Формат на дата и час:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Някои текстови редактори не могат да отворят документ,
 чийто последен ред не е празен.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Поставяне на празен последен ред при запазване</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Премахване на крайните интервали при запазване</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Инерционно превъртане с колелцето на мишката</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Обработка на файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Стартиране с файловете от последния прозорец</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1703,32 +1726,32 @@
 ще се показват от изскачащ диалогов прозорец.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Стартиране с тази команда: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Команда + Аргументи</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Показване на последно про&меняни файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Показване на последно &отваряни файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Запазване на промените на отворените файлове всеки:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Помощ</translation>
     </message>
@@ -1738,7 +1761,7 @@
         <translation>Стартиране със страничен панел</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1748,57 +1771,57 @@
 да обединявате прозорец с единичен раздел с друг прозорец чрез влачене на раздела.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Скриване на лентата на раздела при единичен раздел</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Текст</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Текстов редактор</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Прехвърляне на редовете по подразбиране</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Автоматично прилагане на отстъп</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Показване на &номера на редовете винаги</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Под&чертаване на синтаксиса по подразбиране</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Т&ъмна цвeтна схема</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Стойност на фоновия цвят: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1817,13 +1840,13 @@
 процесът може да бъде прекратен с Ctrl + Alt + E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Необходимо е повторно отваряне на прозореца, за да влезе в сила.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1842,13 +1865,13 @@
 Нуждае се от повторно отваряне на прозореца, за да влезе в сила.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Изпълняване на изпълними скриптове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1860,8 +1883,8 @@
 Изисква рестартиране на приложението, за да влезе в сила.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1876,35 +1899,35 @@
 MMM dd, гггг, hh: mm: ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Размер на текста в лентата на раздели:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> интервали</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Плътен текстов курсор</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Ако курсорът е вътре в текстовия изглед,
 трябва ли превъртането на колелцето на мишката да бъде инерционно?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Проверка на правопис</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1913,51 +1936,51 @@
 име, но с разширение ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Път до Hunspell речник:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Добавяне на речник...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Ако това не е отметнато, проверка на правописа
 ще стартира от началото на документа.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Започване на проверката на правописа от текстовия курсор</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Брой на наскоро обработвани файлове: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Само ако броят им не е по-голям от 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Само за файлове, които съществуват и могат да бъдат запазени.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1972,97 +1995,97 @@
 крайни интервали от текстов файл.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Разрешаване запазването на немодифицирани файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Показване на предупреждение вместо това.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Отваряне на нетекстови файлове не е позволено</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>По подразбиране, когато файловете се копират, те ще
 да бъдат отворени, ако се поставят в FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Поставяне на пътя вместо файлове</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Клавишни комбинации</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Действие</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Комбинация</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Възстановяване на комбинациите по подразбиране.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>По подразбиране</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Цветове на синтаксис</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Елемент</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Цвят на текста</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Стойност на цвета за бялото работно пространство:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Има ефекта само, ако са показани номерата на редовете.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Стойност на подчертаване на текущ ред:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Възстановяване на цветовете на синтаксис по подразбиране.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Затваряне</translation>
     </message>
@@ -2079,111 +2102,111 @@
         <translation>Двойно кликване на цвят за промяна.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>файла</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>файл</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Предупреждение: Повтарящи се комбинации са засечени!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Функции, URLs,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Вградени функции</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Коментари</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Цитати</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Типове</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Ключови думи</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Числа</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Регулярни изрази, кодови блокове,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Блокове на документи, XML / HTML елементи,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown заглавия, CSS стойности,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Допълнителни елементи</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Изисква рестартиране на приложението, за да има ефект на промените.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Необходимо е повторно отваряне на прозореца, за да влезе в сила.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Последно отва&ряни</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Последно про&меняни</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Типът на комбинацията беше запазен.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Файлове на Hunspell речник (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Избиране цветове на синтаксис</translation>
     </message>
@@ -2191,38 +2214,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Търсене...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Зачитане на регистъра</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Цяла дума</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Регулярен израз</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Търсене с рег.изр...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Следващ</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Предишен</translation>
     </message>
@@ -2375,7 +2398,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Филтър...</translation>
     </message>
@@ -2421,7 +2444,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Щракнете двукратно, за да центрирате текущия ред</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_cs.ts featherpad-1.0.1/featherpad/data/translations/featherpad_cs.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_cs.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_cs.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licence</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Bez názvu</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>M&ožnosti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Znaková sada</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Uložit</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Nahrazení</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Nahradit vše</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Nedávno otevřeno</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Zavřít</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Uložit změny?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Přejděte prosím do tohoto okna nebo zavřete jeho dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokument byl změněn.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Zahodit změny</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Zrušit</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Ne všemu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Neuloženo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Řádky</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Vybr. znaky</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Slova</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>V tomto panelu je spuštěný jiný proces!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Soubor se skriptem</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Jiné okno FeatherPad má modální dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Pozice:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normální</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Soubor neexistuje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Otevřít odkaz</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Zkopírovat odkaz</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>V rámci jednoho panelu může být pouze jeden proces.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Výstup ze skriptu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Vyčistit</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad neotevírá soubory větší než 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Soubory, neobsahující text, neotevřeny!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Viz předvolby → Soubory → Neumožňovat otevírat jiné, než textové soubory</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Některé soubory se nepodařilo otevřít!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Může být, že nemáte oprávnění k jejich čtení.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Soubory, které nelze upravovat!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Netextové soubory nebo takové, které obsahují opravdu dlouhé řádky není možné upravovat.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Zjištěn předchozí pád!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Nejlépe bude zavřít všechna okna s FeatherPad a spustit znovu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instance uživatele správce systému (root)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Všechny soubory (*);;.%1 Soubory (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Otevřít soubor…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 soubory (*.%1);;Všechny soubory (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Uložit jako…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Ponechat znakovou sadu a uložit jako…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Ukládání s právy správce systému.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Čekání na ověření se…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>„pkexec“ nenalezeno. Nainstalujte Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Ano</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Ne</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Zrušit</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Opravdu chcete použít konce řádků jako v <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>To může být užitečné pro čitelnost v MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Není možné uložit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntaxe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Obrovské soubor neotevřeny!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Tabulátory jsou převedeny na mezery.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Označený text je příliš dlouhý.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Není zcela zpracováno.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Tento soubor byl změněn z jiné aplikace či jinak!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Buďte opatrní při opětovném načítání nebo ukládání tohoto dokumentu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Tiskne se…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Vytisknout dokument</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Tisk dokončen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 stránek</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Zkopírovat cílový popis umístění</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Otevřít cíl zde</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Otevřít složku, ve které se nachází</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Je třeba přidat Hunspell slovník.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Viz předvolby → Text → Kontrola pravopisu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell slovník neexistuje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell slovník není doprovázen affix souborem.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>V dokumentu nejsou žádné překlepy.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Žádné překlepy od pozice kurzoru.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Některé soubory se nepodařilo uložit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Překladatelé</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Nenáročný editor neformátovaného textu s panely</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>založeno na Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>alias</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>O aplikaci FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Žádné nahrazení</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Jedno nahrazení</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln nahrazení</numerusform>
@@ -1250,12 +1262,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Je zvýrazněno prvních 1000 nahrazení.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Překročen limit velikosti pro zvýrazňování syntaxe.</translation>
     </message>
@@ -1263,13 +1275,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1436,64 +1448,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Ve výchozím stavu skrýt pruh vyhledávání</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Ve výchozím stavu má každá položka
 vyhledávání oddělenou historii.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Použít sdílenou historii hledání</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Vždy zobrazovat st&avový pruh</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Zobrazovat ve stavovém pruhu pozici kurzoru</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Projeví se po zavření tohoto dialogu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Pozice panelu: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Sever</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Jih</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Západ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Východ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1505,17 +1528,17 @@
 Pohyb po panelech pomocí kolečka myši ovlivněn není.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Pohyb po panelech pořád dokol&a</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Při zavření posledního panelu zavřít okno</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1529,12 +1552,12 @@
 že mají vícero ploch.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Vždy otevírat v samostatných oknech</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1545,32 +1568,32 @@
 Některá desktopová prostředí, jako KDE a LXQt takové poskytují.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Nativní souborový dialog</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Pro písmo s neměnnou šířkou odškrtněte.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>&Zapamatovat písmo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Toto se týká kulatých, složených a hranatých závorek, dále uvozovek.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Automatické ukončování závorek</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1579,114 +1602,114 @@
 spojovník dlouhou pomlčkou.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Nahrazovat při psaní tři tečky a dva spojovníky</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Zvýraznit shody ve velikosti písmen a úplné shody
 označeného textu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Zvýrazňování výběru</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Nikdy nezvýrazňovat syntaxi pro soubory > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Toto vytvoří tlačítko nabídky ve
 stavové liště pro změnu syntaxe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Podporovat přebití syntaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Při zvýrazňování syntaxe zobrazovat
 mezery, tabulátory a tab čáry.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Zobrazovat prázdné znaky</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Čáry svislé pozice budou vykreslovány pouze pokud
 písmo editoru má pevné pitch (jako Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Zobrazit svislé čáry od této pozice:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Také zobrazovat konce čáry a dokumentu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Formát data a času:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Některé textové editory nedovedou otevřít
 dokument, jehož poslední řádek není prázdný.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Při ukládání zajistit, že bude (přidán) poslední prázdný řádek</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Při ukládání odebrat mezery na konci</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inerciální posouvání kolečkem myši</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Soubory</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Správa souborů</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Začít soubory posledního okna</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1709,32 +1732,32 @@
 zobrazena ve vyskakovacím dialogu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Začít tímto příkazem: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Příkaz + argumenty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Zobrazit nedávno změněné soubor&y</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Zobrazit nedávno otevřené soubor&y</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Uložit změny v otevřených souborech každých:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Nápověda</translation>
     </message>
@@ -1744,7 +1767,7 @@
         <translation>Spustit v režimu s jedním panelem</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1755,57 +1778,57 @@
 panelu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>Skrýt lištu panelů, poku&d by zde byl jen jeden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Textový editor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Zalamovat řádky už ve výchozím stavu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Automaticky odsazovat už ve výchozím stavu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>&Vždy zobrazovat čísla řádků</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Zvýrazňovat s&yntaxi už ve výchozím stavu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Tmavý m&otiv vzhledu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Barevná hodnota pozadí: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1824,13 +1847,13 @@
 Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Aby se projevilo, je třeba okno zavřít a znovu otevřít.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1849,13 +1872,13 @@
 a otevřít znovu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Spouštět vykonavatelné skripty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1868,8 +1891,8 @@
 Změna se projeví až po restartu aplikace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1884,35 +1907,35 @@
 MMM dd, rrrr, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Velikost panelu s textem:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> mezery</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Tlustý textový kurzor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Pokud se kurzor nachází v textovém pohledu,
 má být posouvání kolečkem myši inerciální?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1921,51 +1944,51 @@
 názvu ale končící na „.aff“.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Popis umístění hunspell slovníku:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Přidat slovník…</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Pokud je toto odškrtnuto, kontrola
 pravopisu bude zahájena od začátku dokumentu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Zahájit kontrolu pravopisu od pozice textového kurzoru</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Počet nedávných řádků: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Pouze pokud jejich počet není vyšší než 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Pouze pro soubory které existují a je možné je uložit.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1981,97 +2004,97 @@
 mezer na konci textového souboru.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Umožnit ukládání nezměněných souborů</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Namísto toho zobrazit varování.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Nepovolit otevírání netextových souborů</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Ve výchozím stavu, když jsou soubory kopírovány
 budou otevřeny pokud byly vloženy do FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Vkládat popisy umístění namísto souborů</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Klávesové zkratky</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Akce</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Klávesová zkratka</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Obnovit výchozí zkratky.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Výchozí</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Barvy syntaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Prvek</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Barva textu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Hodnota barvy prázdného znaku:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Má efekt pouze pokud jsou zobrazeny čísla řádků.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Stávající hodnota zvýraznění řádku:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Vrátit barvy syntaxe na výchozí hodnoty.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Zavřít</translation>
     </message>
@@ -2088,111 +2111,111 @@
         <translation>Barvu změníte dvojklepnutím na ni.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>soubory</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>soubor</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Varování: zjištěna opakující se zkratka!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funkce, URL adresy, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Vestavěné funkce</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Komentáře</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citace</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Typy</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Klíčová slova</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Číslice</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Regulární výrazy, bloky kódu, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Bloky dokumentu, XML/HTML prvky, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Záhlaví markdown, CSS hodnoty, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Další prvky</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Aby se změny projevily, je třeba aplikaci restartovat.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Aby se změny projevily, je třeba okno zavřít a otevřít znovu.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Nedávno otevřené</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Nedávno z&měněné</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Zadaná klávesová zkratka je vyhrazena pro něco jiného.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Soubory hunspell slovníků (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Vybrat barvu syntaxe</translation>
     </message>
@@ -2200,38 +2223,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Hledat…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Rozlišovat malá/VELKÁ písmena</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Celé slovo</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regulární výraz</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Hledat pomocí regulárního výrazu…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Další</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Předchozí</translation>
     </message>
@@ -2384,7 +2407,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtrovat…</translation>
     </message>
@@ -2430,7 +2453,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Dvojklepnutím stávající řádek vystředíte</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_cy.ts featherpad-1.0.1/featherpad/data/translations/featherpad_cy.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_cy.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_cy.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation></translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation></translation>
     </message>
@@ -65,9 +65,9 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation></translation>
     </message>
@@ -134,7 +134,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation></translation>
     </message>
@@ -609,9 +609,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation></translation>
     </message>
@@ -797,449 +797,461 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1250,12 +1262,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation></translation>
     </message>
@@ -1263,13 +1275,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1433,63 +1445,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1497,17 +1520,17 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1516,12 +1539,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1529,141 +1552,141 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1677,32 +1700,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation></translation>
     </message>
@@ -1712,7 +1735,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1720,57 +1743,57 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1782,13 +1805,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1800,13 +1823,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1815,8 +1838,8 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1826,84 +1849,84 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1913,96 +1936,96 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation></translation>
     </message>
@@ -2018,111 +2041,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2130,38 +2153,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation></translation>
     </message>
@@ -2313,7 +2336,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation></translation>
     </message>
@@ -2359,7 +2382,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_da.ts featherpad-1.0.1/featherpad/data/translations/featherpad_da.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_da.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_da.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licens</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Unavngivet</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Valgmuligheder</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kodning</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Gem</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Erstatning</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Erstat alle</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Seneste åbnede</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Luk</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Gem ændringer?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Tag dig venligst at det vindue eller luk dets dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokumentet er blevet ændret.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Forkast ændringer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Annuller</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nej til alle</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Ugemt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Linjer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Vælg tegn</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Ord</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>En anden proces kører i dette faneblad!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Script-fil</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Et andet FeatherPad-vindue har en modal dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Placering:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Filen findes ikke.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Åbn link</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Kopiér link</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Kun en proces pr. faneblad er tilladt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Script-output</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Ryd</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad åbner ikke filer større end 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Fil(er) som ikke er tekst blev ikke åbnet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Se Præferencer → Filer → Tillad ikke åbning af filer som ikke er tekst</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Nogle fil(er) kunne ikke åbnes!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Du har måske ikke tilladelsen til at læse.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Ikke-redigerbar fil(er)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Filer som ikke er tekst, eller filer med kæmpe linjer kan ikke redigeres.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Et tidligere nedbrud er registreret!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Luk helst alle FeatherPad-vinduer og start igen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Root-instans</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Alle filer (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Alle filer (*);;.%1 filer (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Åbn fil...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 filer (*.%1);;Alle filer (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Gem som...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Bevar kodning og gem som...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Gemmer som root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Venter på godkendelse ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" blev ikke fundet. Installer venligst Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Ja</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nej</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Annuller</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Vil du bruge <b>MS Windows</b>-linjeskift?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Det kan være godt for læsbarheden i MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Kan ikke gemmes!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Hjælp</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntaks</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Kæmpe fil(er) ikke åbnet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Tekstens tabulatorer konverteres til mellemrum.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Den valgte tekst er for lang.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Den er ikke behandlet færdigt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Filen er blevet ændret et andet sted eller på en anden måde!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Pas venligst på med at genindlæse eller gemme dokumentet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Igangværende udskrivning ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Udskriv dokument</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Udskrivning udført.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 sider</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Kopiér målsti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Åbn mål her</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopiér endelige målsti</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Åbn endelige mål her</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Åbn indeholdende mappe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Du skal tilføje en Hunspell-orgbog.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Se Præferencer → Tekst → Stavekontrol!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell-ordbogen findes ikke.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Der medfølger ikke en affix-fil til Hunspell-ordbogen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Ingen stavefejl i dokumentet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Ingen stavefejl fra tekstmarkøren.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Stavekontrol</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Nogle filer kan ikke gemmes!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Oversættere</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Et letvægts tekstredigeringsprogram med faneblade</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>baseret på Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Forfatter</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>også kendt som</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Om FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Ingen erstatning</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>En erstatning</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln erstatning</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>De første 1000 erstatninger er fremhævet.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Størrelsesbegrænsningen for syntaksfremhævning er oversteget.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1435,64 +1447,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Skjul &søgelinje som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Som standard har hvert søgeindslag
 en separat søgehistorik.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Brug en delt søgehistorik</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Vis altid &statuslinje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Vis markørplacering på statuslinje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Træder i kraft når denne dialog er blevet lukket.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Tabulator placering: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Nord</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Syd</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Vest</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Øst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1526,17 @@
 Fanebladsnavigation med musehjul påvirkes ikke.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Fanebladsnavigation &starter forfra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Luk vindue når det sidste faneblad lukkes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1549,12 @@
 muligvis ikke at de har flere skriveborde.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Åbn altid i separate vinduer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1542,32 +1565,32 @@
 Nogle skrivebordsmiljøer, såsom KDE og LXQt leverer fildialoger.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Indbygget fildialog</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Fravælg for Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Husk &skrifttype</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Dette dækker parenteser, klammer, vinkelparenteser og citationstegn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Automatisk &vinkelparenteser</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1576,114 +1599,114 @@
 under de rette omstændigheder.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Erstat tredobbelte punktummer og dobbelte bindestrenger mens der skrives</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Fremhæv versalfølsomme og hele resultater
 i den valgte tekst.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Fremhævning af markering</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Fremhæv aldrig syntaks for filer > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Det opretter en menuknap på
 statuslinjen til at skifte syntaksen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Understøt tilsidesættelse af syntaks</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Vis mellemrum, tabulatorer og linjeskift
 når syntaksen er fremhævet.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Vis blanktegn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>De lodrette placeringslinjer tegnes ku hvis editorens
 skrifttype har en fast tegnbredde (såsom Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Vis lodrette linjer startende fra denne placering:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Vis også linje- og dokumentslutninger</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Dato- og klokkeslætformat:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Nogle tekstredigeringsprogrammer kan ikke åbne et dokument
 hvor den sidste linje ikke er tom.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Sørg for en tom linje til sidst når der gemmes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Fjern efterstillede mellemrum når der gemmes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inertisk rulning med musehjul</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Filhåndtering</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Start med filer fra sidste vindue</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1706,32 +1729,32 @@
 af en pop op-dialog.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Start med denne kommando: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Kommando + Argumenter</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>&Vis seneste ændrede filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>&Vis seneste åbnede filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Gem ændringer til åbnede filer hver:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Hjælp</translation>
     </message>
@@ -1741,7 +1764,7 @@
         <translation>Start med siderude-tilstand</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1752,57 +1775,57 @@
 trække og slippe et af dem.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Vis ikke ét faneblad</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Tekst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Tekstredigering</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Ombryd linjer som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Automatisk &indrykning som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Vis altid &linjenumre</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Fremhæv &syntaks som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Mørkt &farveskema</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Baggrundens farveværdi: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1821,13 +1844,13 @@
 processen dræbes med Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Vinduet skal genåbnes før det træder i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1846,13 +1869,13 @@
 Vinduet skal genåbnes før det træder i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Kør eksekverbare scripts</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1865,8 +1888,8 @@
 Programmet skal genstartes før ændringerne træder i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1881,35 +1904,35 @@
 MMM dd, åååå, tt:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tabulatorstørrelse for tekst:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> mellemrum</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Fed tekstmarkør</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Skal musehjulets rulning være inertisk
 hvis markøren er inden i tekstvisningen?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Stavekontrol</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1918,51 +1941,51 @@
 men hvor det slutter med ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Sti til Hunspell-ordbog:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Tilføj ordbog ...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Hvis den er fravalgt, så starter
 stavekontrollen fra dokumentets begyndelse.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Start stavekontrol fra tekstmarkøren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Antal seneste filer: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Kun hvis der er flere end 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Kun for filer som findes og kan gemmes.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1977,97 +2000,97 @@
 efterstillede mellemrum i en tekstfil.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Tillad at uændrede filer gemmes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Vis i stedet en advarsel.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Tillad ikke åbning af filer som ikke er tekst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Som standard når filer kopieres, så
 åbnes de hvis indsættes i FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Indsæt stier frem for filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Genveje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Handling</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Genvej</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Gendan standardgenveje.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Syntaksfarver</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Element</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Tekstfarve</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Farveværdi for blanktegn:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Bruges kun hvis der vises linjenumre.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Fremhævningsværdi for nuværende linje:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Gendan standardsyntaksfarver.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Luk</translation>
     </message>
@@ -2084,111 +2107,111 @@
         <translation>Dobbeltklik på en farve for at ændre den.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>filer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>fil</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Advarsel: Tvetydig genvej registreret!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funktioner, URL'er …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Indbyggede funktioner</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Kommentarer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citater</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Typer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Nøgleord</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Tal</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Regulære udtryk, kodeblokke …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Dokumentblokke, XML-/HTML-elementer …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown-headings, CSS-værdier …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Ekstra elementer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Programmet skal genstartes før ændringerne træder i kraft.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Vinduet skal genåbnes før ændringerne træder i kraft.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Seneste åbnede</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Seneste &ændrede</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Den indtastede genvej var reserveret.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell-ordbogsfiler (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Vælg syntaksfarve</translation>
     </message>
@@ -2196,38 +2219,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Søg...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Forskel på store og små bogstaver</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Hele ord</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regulære udtryk</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Søg med regulære udtryk...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Næste</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Forrige</translation>
     </message>
@@ -2380,7 +2403,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filter...</translation>
     </message>
@@ -2426,7 +2449,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Dobbeltklik for at centrere nuværende linje</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_de.ts featherpad-1.0.1/featherpad/data/translations/featherpad_de.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_de.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_de.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Lizenz</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Unbenannt</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Optionen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kodierung</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Speichern</translation>
     </message>
@@ -486,7 +486,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Zur Anfangsgröße</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -536,7 +536,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation>Text-Tabulatoren zu Leerzeichen</translation>
+        <translation>Tabs in Leerzeichen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -566,7 +566,7 @@
     <message>
         <location filename="../../fp.ui" line="1054"/>
         <source>Previous Ta&b</source>
-        <translation>&Vorherige Registekarte</translation>
+        <translation>&Vorherige Registerkarte</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1092"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Ersatz</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Alles ersetzen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Kürzlich geöffnet</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Schließen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Änderungen speichern?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Bitte dieses Fenster beachten oder Dialog schließen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Das Dokument wurde verändert.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Änderungen &verwerfen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Abbrechen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nein zu Allem</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Nicht gespeichert</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Zeilen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Markierte Zeichen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Worte</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Ein weiterer Prozess läuft in dieser Registerkarte!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Skript</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Ein anderes FeatherPad-Fenster hat einen modalen Dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Position:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Die Datei existiert nicht.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Link öffnen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Link kopieren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Nur ein Prozess pro Registerkarte erlaubt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Ausgabe des Skripts</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Zurücksetzen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad öffnet keine Dateien die grösser sind als 100MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Nicht-Text-Datei(en) nicht geöffnet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Siehe Einstellungen → Dateien → Öffnen von Nicht-Text-Dateien nicht zulassen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Einige Datei(en) konnte(n) nicht geöffnet werden!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Möglicherweise keine Leseberechtigung.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Unbearbeitbare(n) Datei(en)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Nicht-Text Dateien oder Dateien mit sehr langen Zeilen können nicht bearbeitet werden.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Einen vorherigen Absturz wurde erkannt!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Bitte alle FeatherPad-Fenster schliessen und neu starten!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instanz mit Administratorrechten</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Alle Dateien (*);;.%1 Dateien (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Öffne Datei...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Dateien (*.%1);;Alle Dateien (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Speichern unter...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Kodierung behalten und speichern als...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Als root speichern.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Warten auf Authentifizierung ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec" wurde nicht gefunden. Bitte installiert Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Ja</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nein</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Abbrechen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Sollen <b>MS Windows</b> Zeilenenden benutzt werden?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Das könnte für die Lesbarkeit unter MS Windows gut sein.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Konnte nicht gespeichert werden!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntax</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Große Datei(en) nicht geöffnet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Text-Tabulatoren werden in Leerzeichen umgewandelt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Der ausgewählte Text war zu lang.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Es ist nicht vollständig verarbeitet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Diese Datei wurde anderswo oder in einer anderen Weise verändert!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Vorsicht beim Aktualisieren oder Speichern dieses Dokumentes!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Druckvorgang läuft ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Dokument drucken</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Druckvorgang abgeschlossen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Seiten</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Zielpfad kopieren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Ziel hier öffnen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopiere Endzielpfad</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Öffne Endzielpfad</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Enthaltenden Ordner öffnen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Sie müssen ein Hunspell-Wörterbuch hinzufügen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Siehe Einstellungen → Text → Rechtschreibprüfung!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Das Hunspell-Wörterbuch existiert nicht.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Das Hunspell-Wörterbuch wird nicht von einer Zusatzdatei begleitet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Keine Rechtschreibfehler im Dokument.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Keine Rechtschreibfehler vom Textcursor.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Rechtschreibprüfung</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Einige Dateien können nicht gespeichert werden!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Übersetzer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Ein leichtgewichtiger Texteditor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>basierend auf Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Über FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Keine Ersetzung</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Eine Ersetzung</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln Ersetzung</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Die ersten 1000 Ersetzungen sind hervorgehoben.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Das Größenlimit für die Syntaxhervorhebung ist überschritten.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Strg+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1435,64 +1447,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>&Automatisches Ausblenden der Suchleiste</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Standardmäßig hat jeder Sucheintrag
 einen eigenen Suchverlauf.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Verwenden Sie einen freigegebenen Suchverlauf</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>&Statusleiste immer anzeigen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Position des Cursor auf der Statusleiste anzeigen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Wird wirksam nach dem Schließen dieses Dialogs.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Reiterposition: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Norden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Süden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Westen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Osten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1504,17 +1527,17 @@
 Registerkarten sind von der Navigation mit Mausrad nicht betroffen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Fortl&aufende Registerkarten-Navigation</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Fenster beim Schließen der letzten Registerkarte schließen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1528,12 +1551,12 @@
 nicht berichten, dass sie mehrere Arbeitsflächen haben.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Immer in separatem Fenster öffnen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1544,32 +1567,32 @@
 Manche Desktopumgebungen wie KDE und LXQ bieten Dateidialoge an.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>System-Dateidialog</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Abwählen für Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Schriftart &speichern</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Das deckt Einschübe, Zweige, Klammern und Anführungszeichen ab.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Auto-&Klammern</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1578,113 +1601,114 @@
 wenn Sie unter bestimmten Umständen tippen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Ersetzen Sie beim Tippen dreifache Punkte und doppelte Bindestriche</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Markiere Größen-abhängige und Volltreffer
+vom ausgewählten Text.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Auswahlmarkierung</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Keine Syntax-Hervorhebung für Dateien > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Erstelle einen Menü Knopf auf der
 Statusleiste zum Ändern der Syntax.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Freie Wahl der Syntax-Hervorhebung</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Anzeigen von Leerzeichen, Tabulatoren und Einrückungslinien
 wenn die Syntax-Erweiterung aktiv ist.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Zeige Leerzeichen, Tabulatoren und Einrückungslinien</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Die vertikalen Positionslinien werden nur mit Editor-Schriftarten
 mit einem festen Abstand (wie Monospace) gezeichnet.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Anzeigen von vertikalen Linien ab dieser Position:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Auch Zeilen- und Dokumentende anzeigen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Datum- und Zeitformat:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Manchet Texteditoren können keine Dokumente öffnen,
 deren letzte Zeile nicht leer ist.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Leerzeile am Textende bei Speicherung garantieren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Entfernen von nachgestellten Leerzeichen beim Speichern</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Träge Abrollfunktion mit Mausrad</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Dateien</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Datei-Management</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Starte mit den Dateien des letzten Fensters</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1707,32 +1731,32 @@
 Fehlermeldungen in einem Popup-Dialog angezeigt.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Starte mit diesem Befehl: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Befehl + Argumente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Anzeigen von kürzlic&h bearbeiteten Dateien</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Anzeigen von kürzlic&h geöffneten Dateien</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Änderungen geöffneter Dateien speichern alle:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Hilfe</translation>
     </message>
@@ -1742,7 +1766,7 @@
         <translation>Starte mit aktiver Seitenleiste</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1753,57 +1777,57 @@
 Fallenlassen zu integrieren.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Reiterleiste bei einer Registerkarte verbergen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Text</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Texteditor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Automatischer &Zeilenumbruch</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Automatische &Einrückung</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Immer &Zeilennummern anzeigen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Automatische &Syntax-Hervorhebung</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Dunkles &Farbschema</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Hintergrundfarbe Wert: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1823,13 +1847,13 @@
 Der Prozess kann mit Strg+Alt+E beendet werden.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Neustart des Fensters notwendig, um wirksam zu werden.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1848,13 +1872,13 @@
 Neustart des Fensters notwendig, um wirksam zu werden.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Starte ausführbare Skripte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1865,8 +1889,8 @@
 Standard ist 10.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1881,35 +1905,35 @@
 MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tabulatorgröße:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> Leerzeichen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Fetter Textcursor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Sollte die Abrollfunktion des Mausrads träge sein,
 wenn der Cursor innerhalb der Textansicht ist?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Rechtschreibprüfung</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1918,51 +1942,51 @@
  die jedoch auf &quot;.aff&quot; endet.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell-Wörterbuchpfad:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Wörterbuch &hinzufügen ...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Wenn dieses Kontrollkästchen deaktiviert ist, wird
 die Rechtschreibprüfung vom Dokumentstart an gestartet.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Starten Sie die Rechtschreibprüfung am Textcursor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Anzahl von kürzlichen geöffneten Dateien: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Nur wenn ihre Zahl nicht grösser als 50 ist.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Nur für Dateien, die existieren und gespeichert werden können.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1978,96 +2002,97 @@
 Zeilenenden einer Textdatei sinnvoll sein.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Speichern von unveränderten Dateien erlauben</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Zeige stattdessen eine Warnung.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Öffnen von Nicht-Text-Dateien nicht zulassen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wenn Dateien hinein kopiert werden,
+müssen sie geöffnet werden zum Einfügen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Einfügen von Dateipfaden anstatt Dateien</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Tastatur-Kurzbefehle</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Aktion</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Tastatur-Kurzbefehl</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Ursprüngliche Kurzbefehle wiederherstellen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Syntaxfarben</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
-        <translation type="unfinished"></translation>
+        <translation>Element</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Textfarbe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Farbwert Leerzeichen:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Nur wenn Zeilennummern sichtbar sind.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Farbwert aktive Zeile:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
-        <translation type="unfinished"></translation>
+        <translation>Standard Farbwerte wiederherstellen .</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Schließen</translation>
     </message>
@@ -2075,119 +2100,120 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Im Editormodus drücke eine Zusatztaste
+zum Löschen einer Verknüpfung.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
         <source>Double click a color to change it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Doppelklick eine Farbe zum wechsel.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>Dateien</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>Datei</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Warnung: Mehrdeutiger Tastatur-Kurzbefehl erkannt!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Funktionen, URLs,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
-        <translation type="unfinished"></translation>
+        <translation>Eingebaute Funktionen</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
-        <translation type="unfinished"></translation>
+        <translation>Kommentar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Zitat</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
-        <translation type="unfinished"></translation>
+        <translation>Arten</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
-        <translation type="unfinished"></translation>
+        <translation>Schlüsselwort</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
-        <translation type="unfinished"></translation>
+        <translation>Zahl</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Regulärer Ausdruck, Blockcode,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Dokumentteil, XML/HTML Element,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Markdown Überschrift, CSS Wert,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
-        <translation type="unfinished"></translation>
+        <translation>Weitere Komponenten</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Neustart der Anwendung, notwendig um wirksam zu werden.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Neustart des Fensters notwendig, um wirksam zu werden.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Kürzlich geöffnete</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Kürzlich &bearbeitete</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Der eingegebene Tastatur-Kurzbefehl war reserviert.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell-Wörterbuchdateien (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Syntaxfarbe auswählen</translation>
     </message>
@@ -2195,38 +2221,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Suchen...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Groß-/Kleinschreibung beachten</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Ganzes Worte</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regulärer Ausdruck</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Suche mit Regex ...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Nächste</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Vorherige</translation>
     </message>
@@ -2379,7 +2405,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filter ...</translation>
     </message>
@@ -2425,9 +2451,9 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
-        <translation>Doppel-Klick um die aktuelle Zeile zu zentrieren</translation>
+        <translation>Doppel-Klick, um die aktuelle Zeile zu zentrieren</translation>
     </message>
 </context>
 </TS>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_el.ts featherpad-1.0.1/featherpad/data/translations/featherpad_el.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_el.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_el.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Άδεια χρήσης</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Χωρίς τίτλο</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>Ε&πιλογές</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Κωδικοποίηση</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>Α&ποθήκευση</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Αντικατάσταση</translation>
     </message>
@@ -798,449 +798,461 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation type="unfinished">Κλείσιμο</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1248,12 +1260,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation type="unfinished">Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation type="unfinished"></translation>
@@ -1431,63 +1443,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1495,17 +1518,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1514,12 +1537,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1527,141 +1550,141 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1675,32 +1698,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1710,7 +1733,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1718,57 +1741,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1780,13 +1803,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1798,13 +1821,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1813,8 +1836,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1824,84 +1847,84 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1911,96 +1934,96 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation type="unfinished">Κλείσιμο</translation>
     </message>
@@ -2016,111 +2039,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation type="unfinished">Πρόσφατα &τροποποιημένων</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2128,38 +2151,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2311,7 +2334,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2357,7 +2380,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_eo.ts featherpad-1.0.1/featherpad/data/translations/featherpad_eo.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_eo.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_eo.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licenco</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Sentitola</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>A&gordoj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kodiĝo</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>Kon&servi</translation>
     </message>
@@ -152,7 +152,7 @@
     <message>
         <location filename="../../fp.ui" line="533"/>
         <source>&Undo</source>
-        <translation>Malfar&u</translation>
+        <translation>Malfar&i</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="536"/>
@@ -167,7 +167,7 @@
     <message>
         <location filename="../../fp.ui" line="547"/>
         <source>&Redo</source>
-        <translation>Refa&ru</translation>
+        <translation>Refa&ri</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="550"/>
@@ -263,7 +263,7 @@
     <message>
         <location filename="../../fp.ui" line="637"/>
         <source>&Cut</source>
-        <translation>&Tranĉu</translation>
+        <translation>&Tranĉi</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="640"/>
@@ -273,7 +273,7 @@
     <message>
         <location filename="../../fp.ui" line="648"/>
         <source>C&opy</source>
-        <translation>&Kopiu</translation>
+        <translation>&Kopii</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="651"/>
@@ -283,7 +283,7 @@
     <message>
         <location filename="../../fp.ui" line="656"/>
         <source>&Paste</source>
-        <translation>Algl&uu</translation>
+        <translation>Algl&ui</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="659"/>
@@ -293,12 +293,12 @@
     <message>
         <location filename="../../fp.ui" line="667"/>
         <source>&Delete</source>
-        <translation>&Forviŝu</translation>
+        <translation>&Forviŝi</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="672"/>
         <source>&Select All</source>
-        <translation>Elektu &Ĉion</translation>
+        <translation>Elekti &Ĉion</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="675"/>
@@ -453,7 +453,7 @@
     <message>
         <location filename="../../fp.ui" line="1127"/>
         <source>Paste Date and Time</source>
-        <translation>Algluu la Daton kaj Tempon</translation>
+        <translation>Alglui la Daton kaj Tempon</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1130"/>
@@ -551,12 +551,12 @@
     <message>
         <location filename="../../fp.ui" line="1010"/>
         <source>Close Ne&xt Tabs</source>
-        <translation>Fermu la &Sekvajn Foliojn</translation>
+        <translation>Fermi la &Sekvajn Foliojn</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1015"/>
         <source>Close &Previous Tabs</source>
-        <translation>Fermu la &Antaŭajn Foliojn</translation>
+        <translation>Fermi la &Antaŭajn Foliojn</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1043"/>
@@ -576,7 +576,7 @@
     <message>
         <location filename="../../fp.ui" line="1020"/>
         <source>Close &All Tabs</source>
-        <translation>Fermu Ĉ&iujn Foliojn</translation>
+        <translation>Fermi Ĉ&iujn Foliojn</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="153"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Anstataŭigo</translation>
     </message>
@@ -729,17 +729,17 @@
     <message>
         <location filename="../../fp.ui" line="1025"/>
         <source>Close &Other Tabs</source>
-        <translation>Fermu la A&liajn Foliojn</translation>
+        <translation>Fermi la A&liajn Foliojn</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1030"/>
         <source>&Copy File Name</source>
-        <translation>&Kopiu la Dosiernomon</translation>
+        <translation>&Kopii la Dosiernomon</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1035"/>
         <source>Copy File &Path</source>
-        <translation>Kopiu la Dosier&padon</translation>
+        <translation>Kopii la Dosier&padon</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1046"/>
@@ -799,449 +799,461 @@
         <translation>Anstataŭigu ĉion</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Lastatempe Malfermita&j</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Bonvole prizorgu tiun fenestron aŭ nur fermu ĝian dialogon!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Fermi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Pozicio:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normala</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>La dosiero ne ekzitas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Preterlasi ŝanĝojn</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Rezigni</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Ne al ĉio</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Nekonservita</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Elekt. Signoj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
-        <translation>Malfermu la Ligilon</translation>
+        <translation>Malfermi la Ligilon</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
-        <translation>Kopiu la Ligilon</translation>
+        <translation>Kopii la Ligilon</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Alia procezo estas plenumata en ĉi tiu folio!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Nur unu procezo estas permesita po folio.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Eligo de la Skripto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Viŝi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad ne malfermas dosierojn pli grandajn ol 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Neteksta(j) dosiero(j) ne malfermita(j)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Vidu Agordoj → Dosieroj → Malpermesu malfermi netekstajn dosierojn</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Iu(j) dosiero(j) ne povis esti malfermita(j)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Vi eble ne havas la permeson por legi.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Neredaktebla(j) dosiero(j)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Netekstaj dosieroj aŭ tiuj kun longegaj linioj ne redakteblas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Antaŭa kraŝo detektita!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Prefere fermu ĉiujn fenestrojn de FeatherPad kaj komencu denove!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Radika Instanco</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Ĉiuj Dosieroj (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Ĉiuj Dosieroj (*);;.%1-Dosieroj (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Malfermi dosieron...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Konservi kiel...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Teni la kodiĝon kaj konservi kiel...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Konservi kiel la radiko.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Atendi aŭtentigon...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" ne estas trovita. Bonvole instalu Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Jes</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Ne</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Rezigni</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>La taboj estas konvertitaj al spacetoj.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>La elektita teksto estis tro longa.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Ĝi ne estas tute prilaborita.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Ĉi tiu dosiero estas modifita aliloke aŭ alimaniere!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Bonvole zorgu pri ĝia reŝarĝado aŭ konservado!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Presante...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>La presado plenumiĝis.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Paĝoj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
-        <translation>Kopiu la Celpadon</translation>
+        <translation>Kopii la Celpadon</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
-        <translation>Malfermu la Celon Ĉi Tie</translation>
+        <translation>Malfermi la Celon Ĉi Tie</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopii la Finan Celpadon</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Malfermi la Finan Celon Ĉi Tie</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation>Malfermu la Enhavan Dosierujon</translation>
+        <translation>Malfermi la Enhavan Dosierujon</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Vi bezonas Hunspell-vortaron.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Vidu Agordoj → Texto → Literumada Kontrolo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>La Hunspell-vortaro ne ĉeestas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>La Hunspell-vortaro ne estas kune kun afiksa dosiero.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Neniu misliterumo ĉeestas en la dokumento.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Neniu misliterumo ĉeestas ekde la kursoro.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Literumada Kontrolo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Ne eblas konservi iujn dosierojn!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Tradukintoj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Malpeza, foliigita tekst-redaktilo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>bazita sur Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Verkinto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>akk.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Helpo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Linioj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Alia fenestro havas modalan dialogon!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Konservi la ŝanĝojn?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>La dokumento estas modifita.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Vortoj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Skripta Dosiero</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Grandega(j) dosiero(j) ne malfermita(j)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1-Dosieroj (*.%1);;Ĉiuj Dosieroj (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Ĉu vi volas uzi <b>MS Vindozajn</b> lini-finaĵojn?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Povas esti bone por legindeco ĉe MS-Vindozo.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Ne eblas konservi!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintakso</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Presi Dokumenton</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Pri FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Neniu Anstataŭigo</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Unu Anstataŭigo</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln Anstataŭigo</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>La unuaj 1000 anstataŭigoj estas markitaj.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>La grandeca limo por la sintaks-markado estas transpasita.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1435,64 +1447,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>La mnemonikoj de la menubreto estas aktivigitaj per Alt
+kaj povas interrompi adaptitajn fulmoklavojn.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Forigu la mnemonikojn de la menubreto</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Kaŝu la serĉ&breton defaŭlte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Defaŭlte, ĉiu serĉenigo havas
 apartan serĉhistorion.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Uzu komunan serĉhistorion</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Ĉiam vidigu la st&atusbreton</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Montru la pozicion de kursoro sur la statusbreto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Efektiviĝos post kiam ĉi tiu dialogo estas fermita.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>La pozicio de la foliaro: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Nordo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Sudo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Okcidento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Oriento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1527,17 @@
 La foliumado per musrado ne estas influita.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Ĉirkaŭfermu la f&oliumadon</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Fermu la fenestron kun ĝia lasta folio</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1523,16 +1547,16 @@
 la nuna labortablo, la dosieroj estus malfermitaj
 kiel ĝiaj folioj.
 
-Tamen, iuj labortablaj medioj eblas ne sciigi
+Tamen, iuj labortablaj medioj ne sciigas
 tion ke ili havas plurajn labortablojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Ĉiam malfermu en apartaj fenestroj</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1543,33 +1567,33 @@
 Iuj labortablaj medioj, kiel KDE kaj LXQt, provizas dosierdialogojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Indiĝena dosierdialogo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Malmarku por Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Memoru la ti&paron</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Ĉi tio pritraktas la rondan, rektan kaj kunigan
 krampojn kaj ankaŭ la citmarkojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Aŭtomata enkrampigo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1578,114 +1602,114 @@
 dum tajpado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Anstataŭigu la trioblan punkton kaj duoblan streketon dum tajpado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Marki la usklecivajn kaj tutajn kongruojn
 de la elektita teksto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Marku la elektitan tekston</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Ne marku la sintakson por dosieroj > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Ĉi tio estigas menubutonon sur la
 statusbreto por ŝanĝi la sintakson.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Ebligu ŝanĝi la sintakson</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Montru spacetojn, tabojn, kaj tabliniojn
 kiam la sintakso estas markita.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Montru la blankspacojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>La vertikalaj poziciaj linioj estus desegnitaj nur se
 la redaktila tiparo havus fiksitan larĝon (kiel Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Montru vertikalajn liniojn komence de ĉ tiu pozicio:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Ankaŭ montru la liniajn kaj dokumentan finojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Datoprezento:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Iuj tekst-redaktiloj ne povas malfermi
 dokumenton, kies fina linio ne estas malplena.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Garantiu finan linion malplenan konservante</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Forviŝu la vostajn spacetojn konservante</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inercia rulumado per la musrado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Dosieroj</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Dosieradministrado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Startu kun la dosieroj de la lasta fenestro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1708,32 +1732,32 @@
 eligajn kaj erarajn mesaĝojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Startigu kun ĉi tiu komando: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Komando + Operando</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Montru la lastatempe mo&difitajn dosierojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Montru la lastatempe mal&fermitajn dosierojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Konservu la ŝanĝojn al la malfermitaj dosieroj ĉiun:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Helpo</translation>
     </message>
@@ -1743,7 +1767,7 @@
         <translation>Startu kun la flankpanela reĝimo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1754,57 +1778,57 @@
 fenestron al alia per ŝovmetado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Ne montru la unusolan folion</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Teksto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Tekstredaktilo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Ĉir&kaŭfermu la liniojn defaŭlte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Mem-al&ineu defaŭlte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Ĉiam vidigu la lini-numero&jn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Marku la sin&takson defaŭlte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Malluma kolo&rskemo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>La kolorvaloro de la fono: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1823,13 +1847,13 @@
 ĉesigita per la fulmoklavo Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Remalfermado de la fenestro necesas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1848,13 +1872,13 @@
 ke ĉi tio efektivĝu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Plenumu ekzekveblajn skriptojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1867,8 +1891,8 @@
 Restartigo de la aplikaĵo necesas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1883,35 +1907,35 @@
 MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>La grando de tabopaŝo:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> spacetoj</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Dika kursoro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Ĉu la musrada rulumado estu inercia kiam
 la kursoro estas interne de la tekst-vido?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Literumada Kontrolo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1920,51 +1944,51 @@
 nomon se kun la finaĵo ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Pado de Hunspell-vortaro:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Aldoni vortaron...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Se ĉi tio estus malmarkita, la literumada kontrolo
 komenciĝus ekde la komenco de la dokumento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Komencu la literumadan kontrolon ekde la kursoro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Nombro de la lastatempaj dosieroj: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Nur kiam ilia nombro ne estas pli ol 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Nur por la dosieroj ekzistantaj kaj konserveblaj.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1978,97 +2002,97 @@
 ŝanĝi tempindikon aŭ forviŝi vostajn spacetojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Permesu konservi nemodifitajn dosierojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Montru averton anstataŭe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Malpermesu malfermi netekstajn dosierojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Defaŭlte, kiam dosieroj estas kopiitaj, ili estus
 malfermitaj se ili estus algluitaj en FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Algluu dosierpadojn anstataŭ dosierojn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Fulmoklavoj</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Ago</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Fulmoklavo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Restaŭri defaŭltajn fulmoklavojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Defaŭlto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Sintaksaj Koloroj</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elemento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Text-Koloro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Kolorvaloro de blankspacoj:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Ĉi tio efikas nur kiam lini-numeroj estas montritaj.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Kolorvaloro de aktiva linio:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Restaŭri defaŭltajn sintaks-kolorojn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Fermi</translation>
     </message>
@@ -2085,111 +2109,111 @@
         <translation>Duoble klaku koloron por ŝanĝi ĝin.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>dosieroj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>dosiero</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Averto: Ambigua fulmoklavo estas detektita!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funkcioj, URL-oj,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Funkcioj enkonstruitaj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Komentoj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citoj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipoj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Ĉefvortoj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Numeroj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Regulaj esprimoj, kodblokoj,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Dokumentaj blokoj, XML/HTML-elementoj,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Titoloj de Markdown, CSS-valoroj,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Ekstraj elementoj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Restartigo de la aplikaĵo necesas por ke la ŝanĝoj efektiviĝu.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Remalfermado de la fenestro necesas por ke la ŝanĝoj efektiviĝu.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Lastatempe Malfermita&j</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Lastatempe Mod&ifitaj</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>La fulmoklavo tajpita estis rezervita.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell-Vortaraj Dosieroj (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Elekti Sintaks-Koloron</translation>
     </message>
@@ -2197,38 +2221,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Serĉu...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Uskleciva</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Tuta Vorto</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regula Esprimo</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Serĉu per regula esprimo...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Sekva</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Antaŭa</translation>
     </message>
@@ -2381,7 +2405,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtru...</translation>
     </message>
@@ -2427,7 +2451,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Duoble klaku por centrigi la aktivan linion</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_es.ts featherpad-1.0.1/featherpad/data/translations/featherpad_es.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_es.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_es.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licencia</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Sin título</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Opciones</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Codificación</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Guardar</translation>
     </message>
@@ -293,7 +293,7 @@
     <message>
         <location filename="../../fp.ui" line="667"/>
         <source>&Delete</source>
-        <translation>&Borrar</translation>
+        <translation>&Eliminar</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="672"/>
@@ -464,7 +464,7 @@
         <location filename="../../fp.ui" line="1135"/>
         <location filename="../../fp.ui" line="1138"/>
         <source>To Upper Case</source>
-        <translation>Cambiar a mayúsculas el texto seleccionado</translation>
+        <translation>Cambiar a mayúsculas</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1141"/>
@@ -475,7 +475,7 @@
         <location filename="../../fp.ui" line="1146"/>
         <location filename="../../fp.ui" line="1149"/>
         <source>To Lower Case</source>
-        <translation>Cambiar a minúsculas el texto seleccionado</translation>
+        <translation>Cambiar a minúsculas</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1152"/>
@@ -486,7 +486,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Mayúsculas iniciales anglosajonas</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -536,7 +536,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>Tabulaciones de texto a espacios</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -586,7 +586,7 @@
     <message>
         <location filename="../../fp.ui" line="223"/>
         <source>&Encoding</source>
-        <translation>Codificación</translation>
+        <translation>&Codificación</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="227"/>
@@ -610,16 +610,16 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Sustitución</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="575"/>
         <source>Focus/hide search bar</source>
-        <translation>Muestra/Oculta la barra de búsqueda</translation>
+        <translation>Enfocar/ocultar la barra de búsqueda</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="583"/>
@@ -799,449 +799,461 @@
         <translation>Sustituir todo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Abie&rtos recientemente</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Cerrar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>¿Guardar los cambios?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>¡Por favor preste atención a esa ventana o ciérrala!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
-        <translation>El documento ha sido modificado.</translation>
+        <translation>Se ha modificado el documento.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Descartar los cambios</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&No a todo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Sin guardar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Líneas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
-        <translation>Caracteres Sleccionados</translation>
+        <translation>Cteres. seleccionados</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Palabras</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>¡Otro proceso está ejecutando en esta pestaña!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Archivo de script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>¡Hay una ventana adicional abierta en otra ventana de FeatherPad!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Posición:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>El archivo no existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Abrir enlace</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Copiar enlace</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Solo se permite un proceso por pestaña.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Salida del script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Limpiar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad no abre archivos de más de 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
-        <translation>No se abren archivos que no son de texto!</translation>
+        <translation>No se abren archivos que no son de texto.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Vea Preferencias ▸ Archivos ▸ No permitir apertura de archivos que no sean de texto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>¡No se puede abrir uno o más archivos!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Puede que no tenga permisos de escritura.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>¡Archivos no editables!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Los archivos que no sean de texto o tengan líneas muy grandes no se pueden editar.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>¡Se ha detectado que la aplicación tuvo un cierre inesperado!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>¡Es preferible cerrar todas las ventanas de FeatherPad y empezar de nuevo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Permisos de administrador activados</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Todos los archivos (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Todos los archivos (*);;.%1 Archivos (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Abrir archivo...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Archivos (*.%1);;Todos los archivos (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Guardar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Mantener la codificación y guardar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation>Guardar como root (raíz).</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>Esperando por autenticación...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec" no se ha encontrado. ¡Por favor instala Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Sí</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>No</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>¿Quiere usar el fin de línea usado en <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Esto podría ser bueno para la legibilidad en MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>¡No se puede guardar!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Ayuda</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintaxis</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>¡Uno o más archivos son demasiado grandes y no se han abierto!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Los tabuladores en el texto se convierten en espacios.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
-        <translation type="unfinished"></translation>
+        <translation>El texto seleccionado era demasiado largo.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>No ha sido procesado completamente.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>¡El archivo ha sido modificado externamente o de alguna otra forma!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>¡Por favor tenga cuidado al recargar o guardar este documento!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>Impresión en progreso...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Imprimir el documento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impresión completada.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Páginas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Copiar la ruta de destino</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Abrir el destino aquí</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Copiar ruta de destino final</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Abrir destino final aquí</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Abrir carpeta contenedora</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Necesitas añadir un diccionario en formato Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>¡Seleccione: Preferencias → Texto → Revisión Ortográfica!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>El diccionario en formato Hunspell no existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>El diccionario en formato Hunspell no está acompañado de un archivo affix.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>No se encontraron errores de ortografía en este documento.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>No se encontraron errores de ortografía en la selección del cursor.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Revisión Ortográfica</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>¡Algunos archivos no pueden guardarse!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Traductores</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Un editor de texto simple, ligero y con pestañas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>basado en Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>alias</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Acerca de FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>No se encontró ninguna coincidencia con la búsqueda</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Una sustitución</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>Se ha sustituido %Ln palabra o caracter</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Los primeros 1000 reemplazamientos son enfocados.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Se ha superado el límite permitido para utilizar el resaltado de sintaxis.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1410,7 +1422,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="188"/>
         <source>Uncheck for 1/5 of the width.</source>
-        <translation>Si desactiva esta opción se establecera un tamaño de 1/5 del ancho.</translation>
+        <translation>Desmarque para fijar 1⁄5 de la anchura.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="191"/>
@@ -1436,64 +1448,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Los aceleradores de la barra de menús se activan con Alt
+mas podrían interferir con atajos de teclado personalizados.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Desactivar aceleradores de barra de menús</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Mantener oculta la &barra de búsqueda al iniciar la aplicación</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Cada entrada de búsqueda tiene un historial
 de búsqueda separado de forma predeterminada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Usar historial de búsqueda compartido</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Mostrar siempre la barra de est&ado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Ver la posición del cursor de izquierda a derecha en la barra de estado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Los cambios tendrán efecto tras cerrar esta ventana.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Posición de las pestañas: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Arriba</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Seccíon inferior</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Sección izquierda</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Sección derecha</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1505,17 +1529,17 @@
 En el caso de utilizar el raton circulación entre pestañas no se ve afectada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>La navegación entre pestañas es cíclic&a</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Cerrar la ventana al cerrar la última pestaña</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1528,12 +1552,12 @@
 pueden no comunicar que tienen varios escritorios.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Abrir siempre en ventanas separadas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1545,33 +1569,33 @@
 KDE y LXQt, pueden ofrecer sus propias ventanas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Utilizar ventanas nativas del entorno</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Si desactiva esta opción se utilizará la fuente
 de ancho fijo predeterminada del sistema.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Recordar el tipo de letra seleccionado por el usuario</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Activar esta opción también incluye paréntesis, llaves, corchetes y comillas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Utilizar la función de corchetes automáticos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1580,40 +1604,41 @@
 escribe y solo bajo las circunstancias apropiadas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Reemplazar los tres puntos seguidos y dos guiones seguidos mientras se escribe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Resalte las correspondencias con distinción de
+mayúsculas y minúsculas y enteras del texto seleccionado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Enfocar selección</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Nunca resaltar la sintaxis en archivos mayores a: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Si se activa esta opción se creara un botón de menú
 en la barra de estado para poder cambiar la sintaxis.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Permitir el cambio de sintaxis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Si activa esta opción, cuando la sintaxis esté
@@ -1621,13 +1646,13 @@
 los espacios, tabulaciones y líneas de tabulación.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Poder ver y distinguir los espacios en blanco</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Las líneas verticales se repetiran al volver a alcanzar
@@ -1636,60 +1661,60 @@
 si el tipo de fuente utilizado es de ancho fijo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Mostrar líneas verticales a partir de esta posición:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Mostrar símbolos en los saltos de linea y el final del documento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Formato de la fecha y hora:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Algunos editores de texto no pueden abrir un documento
 cuya última línea no esté vacía.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Asegurarse de dejar una última línea vacía al guardar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Borrar los espacios al final de las líneas al guardar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Desplazamiento inercial con la rueda del ratón</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Archivos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Configuración de la gestión de archivos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Iniciar con los archivos de la última ventana</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1709,32 +1734,32 @@
 de salida y de error se mostrarán en una ventana emergente.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Iniciar la aplicación con esta orden: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Orden + Argumentos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Mostrar los archivos modificados recientemente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Mostrar los archivos abiertos recientemente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Guardar los cambios en los archivos abiertos cada:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Ayuda</translation>
     </message>
@@ -1744,7 +1769,7 @@
         <translation>Iniciar la aplicacón en modo panel lateral</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1755,57 +1780,57 @@
 y soltando la pestaña.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>No mostrar las pestañas cuando solo hay una</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Configuración del editor de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Mantener el texto ajustado al tamaño de la ventana</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Insertar sangría automát&icamente al saltar de linea</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Mostrar siempre los n&úmeros de línea</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Activar el resaltado de sintaxis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Utilizar un esquema de c&olor oscuro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Valor del color de fondo: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1825,13 +1850,13 @@
 El proceso ejecutado podra ser finalizado con Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Los cambios tendrán efecto después de reiniciar la aplicación.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1850,13 +1875,13 @@
 Los cambios tendrán efecto después de reiniciar la aplicación.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Utilizar un script ejecutable</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1871,8 +1896,8 @@
 Los cambios tendrán efecto después de reiniciar la aplicación.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1889,35 +1914,35 @@
 MMM dd, aaaa, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tamaño del texto en la pestaña:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> espacios</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Cursor de texto grueso</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>¿Debe ser inercial el desplazamiento con la rueda
 del ratón si el cursor está dentro del área de texto?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Correción Ortográfica</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1926,52 +1951,52 @@
 nombre pero terminando en ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Ruta del diccionario en formato Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Agregar un diccionario...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Si desactiva esta opción no está marcada, el corrector
 ortográfico se iniciará desde el inicio del documento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Iniciar la corrección ortográfica desde el cursor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Número de archivos recientes: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Tenga en cuenta que no debe superar los 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Esta opción solo funciona si el archivo aún existe y si
 tiene los permisos suficientes para ser guardado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1986,96 +2011,97 @@
 los espacios finales de un archivo de texto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Permitir guardar archivos sin modificaciones</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Mostrar un aviso cuando esto suceda.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>No permitir apertura de archivos que no sean de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>Por defecto, cuando los archivos son copiados,
+se abrirán si se pegan dentro de FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Pegar rutas en lugar de archivos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Atajos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Acción</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Atajo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Restaurar atajos predeterminados.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Predeterminado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Colores de sintaxis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elemento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Color de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Valor de color de espacio en blanco:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Sólo tiene efecto si se muestran el número de líneas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Valor de enfoque de la línea actual:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Restaurar colores de sintaxis predeterminados.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Cerrar</translation>
     </message>
@@ -2083,7 +2109,8 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Presione una tecla modificadora para limpiar
+un atajo en el modo de edición.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
@@ -2091,111 +2118,111 @@
         <translation>Pulse dos veces en un color para cambiarlo.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>archivos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>archivo</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Advertencia: ¡Se detectó un atajo que podría ser problemático!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funciones, URL, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Funciones integradas</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Comentarios</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citas</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Palabras clave</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Números</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Expresiones regulares, bloques de código, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Bloques de documentos, elementos XML/HTML, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Títulos de Markdown, valores de CSS, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Elementos adicionales</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Es necesario reiniciar la aplicación para que los cambios tengan efecto.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Los cambios tendrán efecto después de reiniciar la aplicación.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Abiertos &recientemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>&Modificados recientemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>El atajo escrito esta reservado.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Archivos de diccionario en formato Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Seleccionar color de sintaxis</translation>
     </message>
@@ -2203,38 +2230,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Buscar...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Distinguir mayúsculas de minúsculas</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Palabra completa</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Expresión regular</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Buscar con expresiones regulares...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Siguiente</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Anterior</translation>
     </message>
@@ -2387,7 +2414,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtrar...</translation>
     </message>
@@ -2433,7 +2460,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Haga doble clic para centrar la línea actual</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_et.ts featherpad-1.0.1/featherpad/data/translations/featherpad_et.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_et.ts	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_et.ts	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,2462 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="et">
+<context>
+    <name>FeatherPad::AboutDialog</name>
+    <message>
+        <location filename="../../about.ui" line="167"/>
+        <source>License</source>
+        <translation>Litsents</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FPwin</name>
+    <message>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
+        <location filename="../../fpwin.cpp" line="2077"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
+        <source>Untitled</source>
+        <translation>Nimetu</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="71"/>
+        <source>Go to line:</source>
+        <translation>Suundu reale:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="107"/>
+        <source>Select text from cursor to this line
+(Ctrl+Shift+J)</source>
+        <translation>Vali tekst alates kursorist kuni selle reani
+(Ctrl+Shift+J)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="111"/>
+        <source>Select Text</source>
+        <translation>Vali tekst</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="114"/>
+        <source>Ctrl+Shift+J</source>
+        <translation>Ctrl+Shift+J</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="149"/>
+        <source>&File</source>
+        <translation>&Fail</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="189"/>
+        <location filename="../../fp.ui" line="980"/>
+        <source>&Edit</source>
+        <translation>&Muuda</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="219"/>
+        <source>&Options</source>
+        <translation>&Eelistused</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
+        <source>Encoding</source>
+        <translation>Kodeering</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="282"/>
+        <source>&Search</source>
+        <translation>&Otsi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="290"/>
+        <location filename="../../fp.ui" line="746"/>
+        <source>&Help</source>
+        <translation>&Abiteave</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="390"/>
+        <source>Find:</source>
+        <translation>Otsi:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="406"/>
+        <source>To be replaced</source>
+        <translation>Sisu, mida kavatsed asendada</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="419"/>
+        <source>Replace with:</source>
+        <translation>Asenda:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="435"/>
+        <source>Replacing text</source>
+        <translation>Asenda selle sisuga</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="494"/>
+        <source>&New</source>
+        <translation>&Uus</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="497"/>
+        <source>New tab</source>
+        <translation>Uus kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="500"/>
+        <source>Ctrl+N</source>
+        <translation>Ctrl+N</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="505"/>
+        <source>&Open</source>
+        <translation>&Ava</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="508"/>
+        <source>Open a file</source>
+        <translation>Ava fail</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="511"/>
+        <source>Ctrl+O</source>
+        <translation>Ctrl+O</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="519"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
+        <source>&Save</source>
+        <translation>&Salvesta</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="522"/>
+        <source>Save the current tab</source>
+        <translation>Salvesta praegune kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="525"/>
+        <source>Ctrl+S</source>
+        <translation>Ctrl+S</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="533"/>
+        <source>&Undo</source>
+        <translation>&Võta tagasi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="536"/>
+        <source>Undo</source>
+        <translation>Võta viimane tegevus tagasi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="539"/>
+        <source>Ctrl+Z</source>
+        <translation>Ctrl+Z</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="547"/>
+        <source>&Redo</source>
+        <translation>&Tee uuesti</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="550"/>
+        <source>Redo</source>
+        <translation>Korda viimast tegevust uuesti</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="553"/>
+        <source>Ctrl+Shift+Z</source>
+        <translation>Ctrl+Shift+Z</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="561"/>
+        <location filename="../../fp.ui" line="564"/>
+        <source>Reload</source>
+        <translation>Laadi uuesti</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="567"/>
+        <source>Ctrl+Shift+R</source>
+        <translation>Ctrl+Shift+R</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="572"/>
+        <source>&Find</source>
+        <translation>&Otsi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="578"/>
+        <source>Ctrl+F</source>
+        <translation>Ctrl+F</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="586"/>
+        <source>Show/hide replacement dock</source>
+        <translation>Näita/peida asenduste paneeli</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="589"/>
+        <source>Ctrl+R</source>
+        <translation>Ctrl+R</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="594"/>
+        <source>Save &As</source>
+        <translation>Salvesta &kui</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="597"/>
+        <source>Ctrl+Shift+S</source>
+        <translation>Ctrl+Shift+S</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="602"/>
+        <source>&Print</source>
+        <translation>&Trüki</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="605"/>
+        <source>Ctrl+P</source>
+        <translation>Ctrl+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="610"/>
+        <source>Documen&t Properties</source>
+        <translation>Dokumendi &omadused</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="613"/>
+        <source>Ctrl+Shift+D</source>
+        <translation>Ctrl+Shift+D</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="618"/>
+        <source>&Close</source>
+        <translation>Sul&ge</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="621"/>
+        <source>Ctrl+Shift+Q</source>
+        <translation>Ctrl+Shift+Q</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="626"/>
+        <source>&Quit</source>
+        <translation>&Välju</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="629"/>
+        <source>Ctrl+Q</source>
+        <translation>Ctrl+Q</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="637"/>
+        <source>&Cut</source>
+        <translation>L&õika</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="640"/>
+        <source>Ctrl+X</source>
+        <translation>Ctrl+X</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="648"/>
+        <source>C&opy</source>
+        <translation>K&opeeri</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="651"/>
+        <source>Ctrl+C</source>
+        <translation>Ctrl+C</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="656"/>
+        <source>&Paste</source>
+        <translation>&Aseta</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="659"/>
+        <source>Ctrl+V</source>
+        <translation>Ctrl+V</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="667"/>
+        <source>&Delete</source>
+        <translation>&Kustuta</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="672"/>
+        <source>&Select All</source>
+        <translation>&Vali kõik</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="675"/>
+        <source>Ctrl+A</source>
+        <translation>Ctrl+A</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="680"/>
+        <source>&Font</source>
+        <translation>&Font</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="688"/>
+        <source>&Line Numbers</source>
+        <translation>&Reanumbrid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="691"/>
+        <source>Ctrl+L</source>
+        <translation>Ctrl+L</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="702"/>
+        <source>&Wrap Lines</source>
+        <translation>&Murra ridu</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="705"/>
+        <source>Ctrl+W</source>
+        <translation>Ctrl+W</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="716"/>
+        <source>&Auto-Indentation</source>
+        <translation>&Automaatsed taandread</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="719"/>
+        <source>Ctrl+I</source>
+        <translation>Ctrl+I</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="730"/>
+        <source>&Syntax Highlighting</source>
+        <translation>Tõsta &süntaks esile</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="733"/>
+        <source>Ctrl+Shift+H</source>
+        <translation>Ctrl+Shift+H</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="738"/>
+        <source>&Preferences</source>
+        <translation>&Seadistused</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="741"/>
+        <source>Ctrl+Shift+P</source>
+        <translation>Ctrl+Shift+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="749"/>
+        <source>Ctrl+H</source>
+        <translation>Ctrl+H</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="754"/>
+        <source>&About</source>
+        <translation>&Rakenduse teave</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="781"/>
+        <source>Enforce UTF-8</source>
+        <translation>Jõusta UTF-8 kasutamine</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="964"/>
+        <source>Save with &Encoding</source>
+        <translation>Salvesta &kodeeringus</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="969"/>
+        <source>&Jump to</source>
+        <translation>&Suundu reale</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="972"/>
+        <source>Show/hide jump bar</source>
+        <translation>Näita/peida reale hüppamise riba</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="975"/>
+        <source>Ctrl+J</source>
+        <translation>Ctrl+J</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="983"/>
+        <source>Edit text</source>
+        <translation>Muuda teksti</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="986"/>
+        <source>Ctrl+Shift+E</source>
+        <translation>Ctrl+Shift+E</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1089"/>
+        <source>&Run</source>
+        <translation>&Käivita</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1095"/>
+        <source>Ctrl+E</source>
+        <translation>Ctrl+E</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1100"/>
+        <source>&Clear</source>
+        <translation>&Eemalda</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1103"/>
+        <source>Clear the list of recently modified files</source>
+        <translation>Tühjenda hiljuti muudetud failide loend</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1108"/>
+        <source>Save/Restore Session</source>
+        <translation>Salvesta või taasta sessioon</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1111"/>
+        <source>Sa&ve/Restore Session</source>
+        <translation>Sal&vesta või taasta sessioon</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1114"/>
+        <source>Ctrl+M</source>
+        <translation>Ctrl+M</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1119"/>
+        <source>Side-Pane</source>
+        <translation>Külgpaneel</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1122"/>
+        <source>Ctrl+Alt+P</source>
+        <translation>Ctrl+Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1127"/>
+        <source>Paste Date and Time</source>
+        <translation>Aseta kuupäev ja kellaaeg</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1130"/>
+        <source>Ctrl+Shift+V</source>
+        <translation>Ctrl+Shift+V</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1135"/>
+        <location filename="../../fp.ui" line="1138"/>
+        <source>To Upper Case</source>
+        <translation>Muuda suurtähtedeks</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1141"/>
+        <source>Ctrl+Shift+U</source>
+        <translation>Ctrl+Shift+U</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1146"/>
+        <location filename="../../fp.ui" line="1149"/>
+        <source>To Lower Case</source>
+        <translation>Muuda väiketähtedeks</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1152"/>
+        <source>Ctrl+Shift+L</source>
+        <translation>Ctrl+Shift+L</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1157"/>
+        <location filename="../../fp.ui" line="1160"/>
+        <source>To Start Case</source>
+        <translation>Muuda esimesed tähed suureks</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1168"/>
+        <location filename="../../fp.ui" line="1171"/>
+        <source>Last Active Tab</source>
+        <translation>Viimati kasutatud kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1174"/>
+        <source>F1</source>
+        <translation>F1</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1179"/>
+        <location filename="../../fp.ui" line="1182"/>
+        <source>Sort Lines</source>
+        <translation>Sorteeri read</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1187"/>
+        <location filename="../../fp.ui" line="1190"/>
+        <source>Sort Lines Reversely</source>
+        <translation>Sorteeri read tagurpidi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1195"/>
+        <source>Check Spelling</source>
+        <translation>Kontrolli õigekirja</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1198"/>
+        <source>F2</source>
+        <translation>F2</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1203"/>
+        <location filename="../../fp.ui" line="1206"/>
+        <source>Save All Files</source>
+        <translation>Salvesta kõik failid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1211"/>
+        <location filename="../../fp.ui" line="1214"/>
+        <source>User Dictionary</source>
+        <translation>Kasutaja koostatud sõnastik</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1219"/>
+        <source>Text Tabs to Spaces</source>
+        <translation>Muuda tabulaatorisammud tühikuteks</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="994"/>
+        <source>&Detach Tab</source>
+        <translation>&Eralda kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="997"/>
+        <source>Ctrl+T</source>
+        <translation>Ctrl+T</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1010"/>
+        <source>Close Ne&xt Tabs</source>
+        <translation>Sulge &järgmised kaardid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1015"/>
+        <source>Close &Previous Tabs</source>
+        <translation>Sulge &eelmised kaardid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1043"/>
+        <source>Ne&xt Tab</source>
+        <translation>Jä&rgmine kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1054"/>
+        <source>Previous Ta&b</source>
+        <translation>Ee&lmine kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1092"/>
+        <source>Execute</source>
+        <translation>Käivita</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1020"/>
+        <source>Close &All Tabs</source>
+        <translation>Sulge &kõik kaardid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="153"/>
+        <source>Recently &Modified</source>
+        <translation>Hiljuti &muudetud failid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="223"/>
+        <source>&Encoding</source>
+        <translation>&Kodeerimine</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="227"/>
+        <source>&Unicode</source>
+        <translation>&Unicode</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="234"/>
+        <source>&Western European</source>
+        <translation>&Lääne-Euroopa</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="242"/>
+        <source>&East European</source>
+        <translation>&Ida-Euroopa</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="250"/>
+        <source>Ea&st Asian</source>
+        <translation>Kau&g-Ida</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="342"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
+        <source>Replacement</source>
+        <translation>Asenda sisu</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="575"/>
+        <source>Focus/hide search bar</source>
+        <translation>Säti fookus otsinguribale või peida otsinguriba</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="583"/>
+        <source>&Replace</source>
+        <translation>&Asenda</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="765"/>
+        <source>Windows Arabic (&CP1256)</source>
+        <translation>Windowsi Araabia (&CP1256)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="773"/>
+        <source>&Other</source>
+        <translation>&Muud</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="792"/>
+        <source>&UTF-8</source>
+        <translation>&UTF-8</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="803"/>
+        <source>UTF-&16</source>
+        <translation>UTF-&16</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="814"/>
+        <source>&ISO-8859-1</source>
+        <translation>&ISO-8859-1</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="825"/>
+        <source>&Windows-1252</source>
+        <translation>&Windows-1252</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="836"/>
+        <source>&Cyrillic (CP1251)</source>
+        <translation>&Kirillitsa (CP1251)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="847"/>
+        <source>Cyrillic (&KOI8-U)</source>
+        <translation>Kirillitsa (&KOI8-U)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="858"/>
+        <source>Cyrillic (&ISO-8859-5)</source>
+        <translation>Kirillitsa (&ISO-8859-5)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="869"/>
+        <source>&Chinese (BIG5)</source>
+        <translation>&Hiina (BIG5)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="880"/>
+        <source>Chinese (&GB18030)</source>
+        <translation>Hiina (&GB18030)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="891"/>
+        <source>&Japanese (ISO-2022-JP)</source>
+        <translation>&Jaapani (ISO-2022-JP)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="902"/>
+        <source>Japanese (&ISO-2022-JP-2)</source>
+        <translation>Jaapani (&ISO-2022-JP-2)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="913"/>
+        <source>Japanese (ISO-&2022-KR)</source>
+        <translation>Jaapani (ISO-&2022-KR)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="924"/>
+        <source>Ja&panese (CP932)</source>
+        <translation>Jaa&pani (CP932)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="935"/>
+        <source>Japa&nese (EUC-JP)</source>
+        <translation>Jaapa&ni (EUC-JP)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="943"/>
+        <source>&Korean (CP949)</source>
+        <translation>&Korea (CP949)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="951"/>
+        <source>K&orean (CP1361)</source>
+        <translation>K&orea (CP1361)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="959"/>
+        <source>Korean (&EUC-KR)</source>
+        <translation>Korea (&EUC-KR)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1005"/>
+        <source>ISO-&8859-15</source>
+        <translation>ISO-&8859-15</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1025"/>
+        <source>Close &Other Tabs</source>
+        <translation>Sulge &muud kaardid</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1030"/>
+        <source>&Copy File Name</source>
+        <translation>&Kopeeri faili nimi</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1035"/>
+        <source>Copy File &Path</source>
+        <translation>Ko&peeri faili asukoht</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1046"/>
+        <source>Alt+Right</source>
+        <translation>Alt+Right</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1057"/>
+        <source>Alt+Left</source>
+        <translation>Alt+Left</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1065"/>
+        <source>&First Tab</source>
+        <translation>&Esimene kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1068"/>
+        <source>Alt+Down</source>
+        <translation>Alt+Down</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1076"/>
+        <source>&Last Tab</source>
+        <translation>&Viimane kaart</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1079"/>
+        <source>Alt+Up</source>
+        <translation>Alt+Up</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1084"/>
+        <source>Menu</source>
+        <translation>Menüü</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="97"/>
+        <source>Calculate number of words
+(For huge texts, this may be CPU-intensive.)</source>
+        <translation>Loe kokku sõnade arv
+(mahuka teksti puhul see tekitab protsessorikoormust)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="112"/>
+        <source>Next</source>
+        <translation>Järgmine</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="113"/>
+        <source>Previous</source>
+        <translation>Eelmine</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="114"/>
+        <source>Replace all</source>
+        <translation>Asenda kõik</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="593"/>
+        <source>&Recently Opened</source>
+        <translation>&Hiljuti avatud</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1917"/>
+        <source>Close</source>
+        <translation>Sulge</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1242"/>
+        <source>Save changes?</source>
+        <translation>Kas salvestame muudatused?</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="894"/>
+        <source>Please attend to that window or just close its dialog!</source>
+        <translation>Palun lõpeta tegevused selles rakenduseaknas või lihtsalt sulge dialoogiaken!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1246"/>
+        <source>The document has been modified.</source>
+        <translation>Sa oled dokumenti muutnud.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1257"/>
+        <source>&Discard changes</source>
+        <translation>&Jäta muudatused salvestamata</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1258"/>
+        <source>&Cancel</source>
+        <translation>&Katkesta</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1260"/>
+        <source>&No to all</source>
+        <translation>&Vasta eitavalt kõigile</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
+        <source>Unsaved</source>
+        <translation>Salvestamata</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
+        <source>Lines</source>
+        <translation>Ridu</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
+        <source>Sel. Chars</source>
+        <translation>Tähemärke valitud</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
+        <source>Words</source>
+        <translation>Sõnu</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1800"/>
+        <source>Another process is running in this tab!</source>
+        <translation>Sellel kaardil juba üks tegevus on pooleli!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1908"/>
+        <source>Script File</source>
+        <translation>Skriptifail</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="893"/>
+        <source>Another FeatherPad window has a modal dialog!</source>
+        <translation>Teises FeatherPad'i aknas juba on tegevusaken avatud!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
+        <source>Position:</source>
+        <translation>Asukoht:</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
+        <source>Normal</source>
+        <translation>Tavaline</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
+        <source>The file does not exist.</source>
+        <translation>Faili pole olemas.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1613"/>
+        <source>Open Link</source>
+        <translation>Ava link</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1626"/>
+        <source>Copy Link</source>
+        <translation>Kopeeri link</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1801"/>
+        <source>Only one process is allowed per tab.</source>
+        <translation>Ühe kaardi kohta on võimalik vaid üks protsess.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1904"/>
+        <source>Script Output</source>
+        <translation>Skripti väljund</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1920"/>
+        <source>Clear</source>
+        <translation>Kustuta</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2546"/>
+        <source>FeatherPad does not open files larger than 100 MiB.</source>
+        <translation>FeatherPad ei ava 100 megabaidist suuremaid faile.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2554"/>
+        <source>Non-text file(s) not opened!</source>
+        <translation>Mitte-tekstifail(id) jäi(d) avamata!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2555"/>
+        <source>See Preferences → Files → Do not permit opening of non-text files</source>
+        <translation>Tee vajalik muudatus siin: Seadistused → Failid → Ära luba avada mitte-tekstifaile</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2564"/>
+        <source>Some file(s) could not be opened!</source>
+        <translation>Mõni(ed) fail(id) jäid avamata!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2565"/>
+        <source>You may not have the permission to read.</source>
+        <translation>Sul ilmselt puuduvad õigused seda faili lugeda.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2575"/>
+        <source>Uneditable file(s)!</source>
+        <translation>Faili või faile ei saa muuta!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2576"/>
+        <source>Non-text files or files with huge lines cannot be edited.</source>
+        <translation>Sa ei saa muuta faile, mis pole tekstifailid või milles on tohutu arv ridu.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2640"/>
+        <source>A previous crash detected!</source>
+        <translation>Tuvastasin rakenduse varasema kokkujooksmise!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2641"/>
+        <source>Preferably, close all FeatherPad windows and start again!</source>
+        <translation>Soovitame, et sulge kõik FeatherPad'i aknad ja alusta uuesti!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2649"/>
+        <source>Root Instance</source>
+        <translation>Rakenduse kasutamine juurkasutaja õigustes</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
+        <source>All Files (*)</source>
+        <translation>Kõik failid (*)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2726"/>
+        <source>All Files (*);;.%1 Files (*.%1)</source>
+        <translation>Kõik failid (*) (*);;.%1 faili (*.%1)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2730"/>
+        <source>Open file...</source>
+        <translation>Ava fail...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2900"/>
+        <source>.%1 Files (*.%1);;All Files (*)</source>
+        <translation>.%1 faili (*.%1);;kõik failid (*)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
+        <source>Save as...</source>
+        <translation>Salvesta kui...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3025"/>
+        <source>Keep encoding and save as...</source>
+        <translation>Jäta kodeering samaks ja salvesta kui...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3297"/>
+        <source>Saving as root.</source>
+        <translation>Salvestan juurkasutajana.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3298"/>
+        <source>Waiting for authentication...</source>
+        <translation>Ootan autentimist...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3418"/>
+        <source>"pkexec" is not found. Please install Polkit!</source>
+        <translation>Tarvikut „pkexec“ ei leidu. Palun paigalda Polkit!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3106"/>
+        <source>Yes</source>
+        <translation>Jah</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3107"/>
+        <source>No</source>
+        <translation>Ei</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3108"/>
+        <source>Cancel</source>
+        <translation>Tühista</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3109"/>
+        <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
+        <translation>Kas sa soovid kasutada <b>MS Windows'ile</b> omaseid rea lõpumärke?</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3110"/>
+        <source>This may be good for readability under MS Windows.</source>
+        <translation>Failide loetavuse mõttes Windows operatsioonisüsteemis on see hea mõte.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
+        <source>Cannot be saved!</source>
+        <translation>Salvestamine ei õnnestu!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
+        <source>Help</source>
+        <translation>Abiteave</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
+        <source>Syntax</source>
+        <translation>Süntaks</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2545"/>
+        <source>Huge file(s) not opened!</source>
+        <translation>Suur(ed) fail(id) on avamata!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3573"/>
+        <source>Text tabs are converted to spaces.</source>
+        <translation>Teksti asuvad tabulaatorisammud on muudetud nüüd tühikuteks.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3675"/>
+        <source>The selected text was too long.</source>
+        <translation>Valitud tekst oli liiga pikk.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3676"/>
+        <source>It is not fully processed.</source>
+        <translation>See ei ole täielikult töödeldud.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
+        <source>This file has been modified elsewhere or in another way!</source>
+        <translation>Seda faili on mingil muul viisil muudetud!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
+        <source>Please be careful about reloading or saving this document!</source>
+        <translation>Palun ole selle dokumendi laadimisel ja salvestamisel ettevaatlik!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4484"/>
+        <source>Printing in progress...</source>
+        <translation>Trükkimine on töös...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4535"/>
+        <source>Print Document</source>
+        <translation>Trüki see dokument</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4541"/>
+        <source>Printing completed.</source>
+        <translation>Trükkimine on valmis.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
+        <source>%1 Pages</source>
+        <translation>%1 lehte</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
+        <source>Copy Target Path</source>
+        <translation>Kopeeri sihtkausta asukoht</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
+        <source>Open Target Here</source>
+        <translation>Ava asukoht siin</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopeeri lõpliku sihtkausta asukoht</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Ava lõplik asukoht siin</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
+        <source>Open Containing Folder</source>
+        <translation>Ava asukoha kaust failihalduris</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5495"/>
+        <source>You need to add a Hunspell dictionary.</source>
+        <translation>Sa pead lisama Hunspelli-põhise sõnastiku.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
+        <source>See Preferences → Text → Spell Checking!</source>
+        <translation>Tee vajalik muudatus siin: Seadistused → Tekst → Õigekiri!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5502"/>
+        <source>The Hunspell dictionary does not exist.</source>
+        <translation>Hunspelli-põhist sõnastikku ei leidu.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5512"/>
+        <source>The Hunspell dictionary is not accompanied by an affix file.</source>
+        <translation>Hunspell'i sõnastikul puudub liidete fail.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
+        <source>No misspelling in document.</source>
+        <translation>Dokumendis ei leidu õigekirjavigu.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
+        <source>No misspelling from text cursor.</source>
+        <translation>Alates kursori asukohast ei leidu õigekirjavigu.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5586"/>
+        <source>Spell Checking</source>
+        <translation>Õigekirjakontroll</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5923"/>
+        <source>Some files cannot be saved!</source>
+        <translation>Mõne faili salvestamine ei õnnestu!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <source>Translators</source>
+        <translation>Tõlkijad</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5966"/>
+        <source>A lightweight, tabbed, plain-text editor</source>
+        <translation>Lihtne kaartide-põhine tekstiredaktor,</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5967"/>
+        <source>based on Qt</source>
+        <translation>mis kasutab Qt-teeke</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5968"/>
+        <source>Author</source>
+        <translation>Autor</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5969"/>
+        <source>aka.</source>
+        <translation>tuntud ka kui</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
+        <source>About FeatherPad</source>
+        <translation>FeatherPad'i teave</translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="242"/>
+        <source>No Replacement</source>
+        <translation>Pole midagi asendada</translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="244"/>
+        <source>One Replacement</source>
+        <translation>Üks asendus</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../../replace.cpp" line="246"/>
+        <source>%Ln Replacements</source>
+        <translation>
+            <numerusform>%Ln asendus</numerusform>
+            <numerusform>%Ln asendust</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="250"/>
+        <source>The first 1000 replacements are highlighted.</source>
+        <translation>1000 esimest asendust on esile tõstetud.</translation>
+    </message>
+    <message>
+        <location filename="../../syntax.cpp" line="298"/>
+        <source>The size limit for syntax highlighting is exceeded.</source>
+        <translation>Faili suuruse ülempiir esiletõstmisel on ületatud.</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FileDialog</name>
+    <message>
+        <location filename="../../filedialog.h" line="49"/>
+        <source>Ctrl+H</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation>Ctrl+H</translation>
+    </message>
+    <message>
+        <location filename="../../filedialog.h" line="50"/>
+        <source>Alt+.</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation>Alt+.</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FontDialog</name>
+    <message>
+        <location filename="../../fontDialog.ui" line="14"/>
+        <source>Select Font</source>
+        <translation>Vali kirjatüüp</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="38"/>
+        <source>Programming Fonts</source>
+        <translation>Fikseeritud laiusega fondid</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="45"/>
+        <location filename="../../fontDialog.ui" line="55"/>
+        <source>Font:</source>
+        <translation>Font:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="69"/>
+        <source>Size:</source>
+        <translation>Suurus:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="89"/>
+        <source>Weight:</source>
+        <translation>Tüüp:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="103"/>
+        <source>Normal</source>
+        <translation>Tavaline</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="108"/>
+        <source>Medium</source>
+        <translation>Keskmine</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="113"/>
+        <source>Bold</source>
+        <translation>Paks</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="118"/>
+        <source>Black</source>
+        <translation>Ülipaks</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="126"/>
+        <source>Italic</source>
+        <translation>Kaldkiri</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="149"/>
+        <source>Preview</source>
+        <translation>Eelvaade</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::LineEdit</name>
+    <message>
+        <location filename="../../lineedit.cpp" line="34"/>
+        <source>Clear text (Ctrl+K)</source>
+        <translation>Kustuta tekst (Ctrl+K)</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::PrefDialog</name>
+    <message>
+        <location filename="../../prefDialog.ui" line="14"/>
+        <source>Preferences</source>
+        <translation>Eelistused</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="30"/>
+        <source>Window</source>
+        <translation>Rakenduse aken</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="69"/>
+        <source>Window Settings</source>
+        <translation>Akna seadistused</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="75"/>
+        <source>Remember window &size on closing</source>
+        <translation>Sulgemisel jäta meelde akna &suurus</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="84"/>
+        <location filename="../../prefDialog.ui" line="97"/>
+        <location filename="../../prefDialog.ui" line="107"/>
+        <location filename="../../prefDialog.ui" line="120"/>
+        <source>Window frame is excluded.</source>
+        <translation>Välja arvatud aknaraam.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="87"/>
+        <source>Start with this size: </source>
+        <translation>Alusta sellise suurusega: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="100"/>
+        <location filename="../../prefDialog.ui" line="123"/>
+        <source> px</source>
+        <translation> pikslit</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="110"/>
+        <source>×</source>
+        <translation>×</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="148"/>
+        <source>Enforcing a window position is not recommended
+and may not work with some window managers.</source>
+        <translation>Akna asukoha meeldejätmine ei ole soovitatud
+ning see ka ei pruugi toimida mõnde aknahaldurite puhul.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="152"/>
+        <source>Remember window &position on closing</source>
+        <translation>Sulgemisel jäta meelde akna &asukoht</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="159"/>
+        <source>Most suitable with sessions
+but without tab functionality.</source>
+        <translation>Sobib liideseks siis, kui pruugid sessioone
+ilma kaarte kasutamata.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="188"/>
+        <source>Uncheck for 1/5 of the width.</source>
+        <translation>Eemalda valik, kui soovid eraldusjoont viiendikule laiusest.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="191"/>
+        <source>Remember splitter position</source>
+        <translation>Jäta meelde eraldusjoone asukoht</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="200"/>
+        <source>Do not show &toolbar</source>
+        <translation>Ära näita &tööriistariba</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="207"/>
+        <source>If the menubar is hidden,
+a menu button appears on the toolbar.</source>
+        <translation>Peidetud menüüriba puhul
+tekib tööriistaribale menüü nupp.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="211"/>
+        <source>Do not show &menubar</source>
+        <translation>Ära näita &menüüriba</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Menüüriba kiirklahvide käivitajaks on Alt klahv
+ja see võib segada sinu loodud kiirklahvide tööd.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Ära kasuta menüüriba kiirklahve</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
+        <source>Hide search &bar by default</source>
+        <translation>Vaikimisi peida &otsinguriba</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="236"/>
+        <source>By default, each search entry
+has a separate search history.</source>
+        <translation>Vaikimisi me kasutame
+eraldi otsinguajalugu.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="240"/>
+        <source>Use a shared search history</source>
+        <translation>Kasuta jagatud otsinguajalugu</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="247"/>
+        <source>Always show st&atus bar</source>
+        <translation>Alati näita ole&kuriba</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="272"/>
+        <source>Show cursor position on status bar</source>
+        <translation>Olekuribal näita kursori asukohta</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
+        <source>Will take effect after closing this dialog.</source>
+        <translation>Muutus jõustub seadistuste akna sulgemisel.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="286"/>
+        <source>Tab position: </source>
+        <translation>Kaartide asukoht: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="297"/>
+        <source>North</source>
+        <translation>Põhjas</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="302"/>
+        <source>South</source>
+        <translation>Lõunas</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="307"/>
+        <source>West</source>
+        <translation>Läänes</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="312"/>
+        <source>East</source>
+        <translation>Idas</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="338"/>
+        <source>This means that, for LTR, Alt+Right goes to the first tab
+after the last tab is activated, and the same for Alt+Left.
+
+Tab navigation with mouse wheel is not affected.</source>
+        <translation>See tähendab, et liikudes vasakult paremale, Alt+Right vajutamisel peale viimast
+kaarti jõuad sa esimese kaarti juurde ning sarnaselt käitub ka Alt+Left vajutamine.
+
+See valik ei mõjuta hiireratta kasutamist kaartide vahetamisel.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="344"/>
+        <source>Tab navigation wraps &around</source>
+        <translation>Liigu kaartidel ringir&atast</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="364"/>
+        <source>Close window on closing its last tab</source>
+        <translation>Viimase kaardi sulgemisel sulge ka aken</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="371"/>
+        <source>By default, if a FeatherPad window exists on the
+current desktop, files will be opened in its tabs.
+
+However, some desktop environments may not
+report that they have multiple desktops.</source>
+        <translation>Kui FeatherPad'i aken on kasutataval töölaual olemas,
+siis vaikimisi avame uued failid kaartidena.
+
+Aga pead arvestama, et mõned mitme töölauaga
+keskonnad et jaga rakenduste akende kohta täpset teavet.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="378"/>
+        <source>Always open in separate windows</source>
+        <translation>Kaartide asemel ava alati eraldi aknad</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="385"/>
+        <source>If this is checked, the file dialog provided by the current
+desktop environment will be used instead of the Qt file dialog.
+
+Some desktop environments, like KDE and LXQt, provide files dialogs.</source>
+        <translation>Kui see valik on kasutusel, siis kasutame Qt standardse faili avamise
+vaate asemel töölauakeskkonnale omast vaadet.
+
+See funktsionaalsus toimib sellistes töölauakeskkondades, kus
+eraldi faili avamise vaade on olemas (näiteks KDE ja LXQt).</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="391"/>
+        <source>Native file dialog</source>
+        <translation>Kasuta keskkonnale omast failivaliku akent</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="467"/>
+        <source>Uncheck for Monospace.</source>
+        <translation>Süsteemse fikseeritud laiusega fondi kasutamiseks lülita see valik välja.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="470"/>
+        <source>Remember &font</source>
+        <translation>Jäta kasutatud &font meelde</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="491"/>
+        <source>This covers parentheses, braces, brackets and quotes.</source>
+        <translation>Siia hulka kuuluvad ümarsulud, loogelised sulud, nurksulud ja jutumärgid.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="494"/>
+        <source>Auto-&bracket</source>
+        <translation>Lisa sulud &automaatselt</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="501"/>
+        <source>By default, a triple period is replaced with an ellipsis
+and a double hyphen with a long dash while typing,
+under proper circumstances.</source>
+        <translation>Kui kõik klapib, siis vaikimisi asendame
+kolm punkti (...) mõttepunktiga (...) ja 
+kaks sidekriipsu (--) mõttekriipsuga (—).</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="506"/>
+        <source>Replace triple periods and double hyphens while typing</source>
+        <translation>Asenda kolm punkti ja kaks kriipsu vastava tähemärgiga</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="520"/>
+        <source>Highlight case-sensitive and whole matches
+of the selected text.</source>
+        <translation>Tõsta esile tõstutundliku ja täissõna 
+otsingu tulemused.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="524"/>
+        <source>Selection highlighting</source>
+        <translation>Tõsta valik esile</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="587"/>
+        <source>Never highlight syntax for files > </source>
+        <translation>Ära tõsta süntaksit esile, kui fail on suurem kui </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="556"/>
+        <source>This creates a menu button on the
+status bar for changing the syntax.</source>
+        <translation>Selle valiku alusel kuvame staatuseribale
+nupu süntaksivaliku muutmiseks.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="560"/>
+        <source>Support syntax override</source>
+        <translation>Luba teise süntaksi valimist</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="625"/>
+        <source>Show spaces, tabs and tab lines
+when the syntax is highlighted.</source>
+        <translation>Süntaksi esiletõstmisel näita tühikuid, 
+tabulaatoreid ja tabulaatorijooni.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="629"/>
+        <source>Show whitespaces</source>
+        <translation>Näita tühikumärke</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
+        <source>The vertical position lines will be drawn only if
+the editor font has a fixed pitch (like Monospace).</source>
+        <translation>Püstist piirjoont saame kuvada vaid siis, kui sa oled kasutatavaks 
+kirjatüübiks määranud fikseeritud laiusega fondi (nagu näiteks Monospace).</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="649"/>
+        <source>Show vertical lines starting from this position:</source>
+        <translation>Alates sellest veerust joonista püstjoon:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="636"/>
+        <source>Also show line and document ends</source>
+        <translation>Näita rea ja faili lõpumärke</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="775"/>
+        <source>Date and time format:</source>
+        <translation>Kuupäeva ja aja vorming:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="845"/>
+        <source>Some text editors cannot open a document
+whose last line is not empty.</source>
+        <translation>Mõned tekstiredaktorid ei suuda avada faili,
+kui selle viimane rida pole tühi.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="849"/>
+        <source>Ensure an empty last line on saving</source>
+        <translation>Salvestamisel taga, et viimane rida failis oleks tühi</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="856"/>
+        <source>Remove trailing spaces on saving</source>
+        <translation>Eemalda salvestamisel lõpust tühi ruum</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="874"/>
+        <source>Inertial scrolling with mouse wheel</source>
+        <translation>Luba hiirerattaga inertsiaalne rullimine</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="963"/>
+        <source>Files</source>
+        <translation>Failid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="969"/>
+        <source>File Management</source>
+        <translation>Failide haldus</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1086"/>
+        <source>Start with files of last window</source>
+        <translation>Rakenduse avamisel ava viimati kasutusel olnud failid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
+        <source>This can be any starting command with
+arguments, for example, "xterm -hold"
+for running the process in XTerm.
+
+If the command is left empty, the file
+will be executed directly.
+
+If the script is not run in a terminal
+emulator, the output and error messages
+will be shown by a popup dialog.</source>
+        <translation>Selleks võib olla mis iganes käsk,
+kuhu saad lisada argumente, näiteks
+„xterm -hold“, mis võimaldab protsesse
+käivitada XTerm'i alt.
+
+Kui käsk on jäetud tühjaks, siis käivitame
+otseselt faili sisu.
+
+Kui sa skripti ei käivita terminaliemulaatoris,
+siis näitame standardväljundit ja veaväljundit
+hüpikakendes.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1140"/>
+        <source>Start with this command: </source>
+        <translation>Alusta selle käsuga: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1159"/>
+        <source>Command + Arguments</source>
+        <translation>Käsk + argumendid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1044"/>
+        <source>Show recentl&y modified files</source>
+        <translation>Näita &hiljuti muudetud faile</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1074"/>
+        <source>Show recentl&y opened files</source>
+        <translation>Näita &hiljuti &avatud faile</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1173"/>
+        <source>Save changes to opened files every:</source>
+        <translation>Salvesta muudetud faile sellise sagedusega:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1439"/>
+        <source>Help</source>
+        <translation>Abiteave</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="163"/>
+        <source>Start with side-pane mode</source>
+        <translation>Töö alustamisel ava külgpaneel</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="351"/>
+        <source>If this is checked, not only you will lose the informative
+tooltip and context menu of a single tab but you could not
+merge a single tabbed window into another one by tab drag-
+and-drop either.</source>
+        <translation>Selle valiku puhul sa ei saa kasutada üksiku kaardi
+kohtspikrit ja kontekstimenüüd ning pruukida lohistamist
+kahes aknas asuvate kaartide sisu liitmiseks.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="357"/>
+        <source>&Do not show a single tab</source>
+        <translation>Ära näita &üksikut kaarti</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="422"/>
+        <source>Text</source>
+        <translation>Tekst</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="461"/>
+        <source>Text Editor</source>
+        <translation>Tekstide muutmine</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="477"/>
+        <source>&Wrap lines by default</source>
+        <translation>Vaikimisi kasuta &reamurdmist</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="484"/>
+        <source>Auto-&indent by default</source>
+        <translation>Vaikimisi kasuta &taandridu</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="513"/>
+        <source>Always show line &numbers</source>
+        <translation>Alati näita &reanumbreid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="531"/>
+        <source>Highlight s&yntax by default</source>
+        <translation>Vaikimisi kasuta s&üntaksi esiletõstmist</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="691"/>
+        <source>Dark c&olor scheme</source>
+        <translation>Kasuta &tumedat värviteemat</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="726"/>
+        <source>Background color value: </source>
+        <translation>Taustavärvi väärtus: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="594"/>
+        <source> MiB</source>
+        <translation> MiB</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1093"/>
+        <source>This only includes executable files written
+in script languages like Shell and Python.
+
+If it is checked and the opened file is
+executable, the file will be executed by clicking
+the Run button, that appears on the toolbar/filemenu
+when needed, or by its shortcut Ctrl+E. Then, the
+process could be killed by Ctrl+Alt+E.</source>
+        <translation>Siia hulka kuuluvad vaid käsufailid, mis on
+kirjutatud mõnes kestakeeles või Pythonis.
+
+Kui see valik on kasutusel ja avatud fail on
+käivitatav, siis menüüsse ja tööriistaribale 
+ilmuvast Käivita nupust saad ta tööle panna.
+Samuti võid käivitamiseks kasutada Ctrl+E kiirklahvi.
+Skripti töö saad lõpetada Ctrl+Alt+E kiirklahviga.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="688"/>
+        <source>Needs window reopening to take effect.</source>
+        <translation>Selle muudatuse jõustamiseks pead rakenduse akna uuesti avama.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
+        <source>The color value of the background.
+255 means white while 0 means black.
+
+For the light background, it can be
+between 230 and 255; for the dark
+background, between 0 and 50.
+
+Needs window reopening to take effect.</source>
+        <translation>Taustavärvi väärtus.
+255 tähistab valget ja 0 musta.
+
+Heleda tausta jaoks sobib
+230 kuni 255 vahemik ja tumeda
+tausta jaoks sobib 0 kuni 50 vahemik.
+
+Selle muudatuse jõustamiseks pead 
+rakenduse akna uuesti avama.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1103"/>
+        <source>Run executable scripts</source>
+        <translation>Käivita skriptifaile</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
+        <source>The maximum number of recently modified or
+opened files FeatherPad shows. The default
+is 10.
+
+Needs application restart to take effect.</source>
+        <translation>Hiljuti avatud või muudetud failide
+arv, mille FeatherPad meelde jätab.
+Vaikimisi väärtus on 10.
+
+Selle muudatuse jõustamiseks pead
+rakenduse uuesti käivitama.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
+        <source>Used for pasting the date and time.
+
+Takes effect after closing this dialog.
+
+Leave empty for:
+MMM dd, yyyy, hh:mm:ss</source>
+        <translation>Seda väärtust kasutame kuupäeva ja kellaaja asetamisel.
+
+Muutus hakkab kehtima selle vaate sulgemisel.
+
+Kui väärtus on tühi, siis kehtib järgnev vorming:
+MMM dd, yyyy, hh:mm:ss</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="804"/>
+        <source>Text tab size:</source>
+        <translation>Tekstipõhise tabulaatori samm:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="811"/>
+        <source> spaces</source>
+        <translation> tühikut</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="863"/>
+        <source>Thick text cursor</source>
+        <translation>Kasuta toekat tekstikursorit</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="870"/>
+        <source>Should the mouse wheel scrolling be inertial
+if the cursor is inside the text view?</source>
+        <translation>Kui kursor asub tekstivaate sees, kas siis
+hiireratta rullimine peaks olema inertsiaalne?</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="881"/>
+        <source>Spell Checking</source>
+        <translation>Õigekirjakontroll</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
+        <source>A Hunspell dictionary has a name that ends with ".dic"
+and should be alongside an affix file with the same
+name but ending with ".aff".</source>
+        <translation>Hunspelli standardit järgiv sõnastik asub .dic lõpuga
+failis ning tema kõrval peab olema sama nimega ja
+.aff laiendiga affiksifail.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="894"/>
+        <source>Hunspell dictionary path:</source>
+        <translation>Hunspelli sõnastiku asukoht:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
+        <source>Add dictionary...</source>
+        <translation>Lisa sõnastik...</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="925"/>
+        <source>If this is unchecked, spell checking
+will be started from the document start.</source>
+        <translation>Kui see valik pole kasutusel, siis alustame
+õigekirjakontrolli dokumendi algusest.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="929"/>
+        <source>Start spell checking from text cursor</source>
+        <translation>Alusta õigekirjakontrolli alates kursorist</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="984"/>
+        <source>Number of recent files: </source>
+        <translation>Hiljutiste failide arv: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1083"/>
+        <source>Only if their number is not greater than 50.</source>
+        <translation>Kehtib vaid siis, kui neid on alla 50.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
+        <source>Only for files that exist and can be saved.</source>
+        <translation>Kehtib vaid failide puhul, mis on olemas ja salvestatavad.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1183"/>
+        <source> min</source>
+        <translation> min</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1214"/>
+        <source>If this is checked, the Save button/menu-item could
+be used also when the opened file is not modified.
+
+This can be useful under certain circumstances,
+e.g. for changing the time stamp or removing the
+trailing spaces of a text file.</source>
+        <translation>Kui see valik on kasutusel, kas siis saad menüüs ja
+tööriistaribal leiduvat Salvesta nuppu kasutada kui
+fail pole muutunud.
+
+Seda võib vaja olla mõnel erijuhul - näiteks kui soovid
+faili ajatemplit muuta või eemaldada failiridade
+lõpust tühikuid.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1222"/>
+        <source>Allow saving unmodified files</source>
+        <translation>Luba muutmata failide salvestamist</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1229"/>
+        <source>Show a warning instead.</source>
+        <translation>Selle asemel näita hoiatust.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1232"/>
+        <source>Do not permit opening of non-text files</source>
+        <translation>Ära luba selliste failide avamist, mis pole tekstifailid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1239"/>
+        <source>By default, when files are copied, they will
+be opened if they are pasted into FeatherPad.</source>
+        <translation>Vaikimisi FeatherPad faili asetamisel
+avab selle kopeeritud faili.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1243"/>
+        <source>Paste paths instead of files</source>
+        <translation>Aseta faili sisu asemel tema asukoht ja nimi</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1270"/>
+        <source>Shortcuts</source>
+        <translation>Kiirklahvid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1289"/>
+        <source>Action</source>
+        <translation>Tegevus</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1294"/>
+        <source>Shortcut</source>
+        <translation>Kiirklahv</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1302"/>
+        <source>Restore default shortcuts.</source>
+        <translation>Taasta vaikimisi määratud kiirklahvid.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
+        <source>Default</source>
+        <translation>Vaikimisi</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1316"/>
+        <source>Syntax Colors</source>
+        <translation>Süntaksi värvid</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1332"/>
+        <source>Element</source>
+        <translation>Element</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1337"/>
+        <source>Text Color</source>
+        <translation>Teksti värv</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1350"/>
+        <source>Whitespace color value:</source>
+        <translation>Tühikumärkide värv:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
+        <source>Has effect only if line numbers are shown.</source>
+        <translation>Toimib vaid siis, kui reanumbrite kuvamine on kasutusel.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1383"/>
+        <source>Current line highlight value:</source>
+        <translation>Fookuses oleva rea esiletõstmine:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1415"/>
+        <source>Restore default syntax colors.</source>
+        <translation>Taasta vaikimisi seadistatud süntaksivärvid.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1450"/>
+        <source>Close</source>
+        <translation>Sulge</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="104"/>
+        <source>Press a modifier key to clear a shortcut
+in the editing mode.</source>
+        <translation>Muutmisvaates vajuta kiirklahvi
+kustutamiseks muuteklahvi.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="110"/>
+        <source>Double click a color to change it.</source>
+        <translation>Värvi muutmiseks tee topeltklõps.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>files</source>
+        <translation>failid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>file</source>
+        <translation>fail</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
+        <source>Warning: Ambiguous shortcut detected!</source>
+        <translation>Hoiatus: sama kombinatsioon on kasutusel mitmel kiirklahvil!</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="392"/>
+        <source>Functions, URLs,…</source>
+        <translation>Funktsioonid, URLid,…</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="393"/>
+        <source>Built-in Functions</source>
+        <translation>Funktsioonid antud keeles</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="394"/>
+        <source>Comments</source>
+        <translation>Kommentaarid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="395"/>
+        <source>Quotations</source>
+        <translation>Tsitaadid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="396"/>
+        <source>Types</source>
+        <translation>Andmetüübid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="397"/>
+        <source>Key Words</source>
+        <translation>Võtmesõnad</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="398"/>
+        <source>Numbers</source>
+        <translation>Arvud</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="399"/>
+        <source>Regular Expressions, Code Blocks,…</source>
+        <translation>Regulaaravaldised, koodiblokid, …</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="400"/>
+        <source>Document Blocks, XML/HTML Elements,…</source>
+        <translation>Dokumendiblokid, XML'i ja HTML'i elemendid, …</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="401"/>
+        <source>Markdown Headings, CSS Values,…</source>
+        <translation>Pealkirjad Markdown-märgistuses, CSS väärtused, …</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="402"/>
+        <source>Extra Elements</source>
+        <translation>Muud elemendid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="563"/>
+        <source>Application restart is needed for changes to take effect.</source>
+        <translation>Selle muudatuse jõustamiseks pead rakenduse uuesti käivitama.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="582"/>
+        <source>Window reopening is needed for changes to take effect.</source>
+        <translation>Selle muudatuse jõustamiseks pead rakenduse akna uuesti avama.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1370"/>
+        <source>&Recently Opened</source>
+        <translation>&Hiljuti avatud</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1371"/>
+        <source>Recently &Modified</source>
+        <translation>Hiljuti &muudetud failid</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1446"/>
+        <source>The typed shortcut was reserved.</source>
+        <translation>Sisestatud kiirklahv on reserveeritud muuks kasutuseks.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1650"/>
+        <source>Hunspell Dictionary Files (*.dic)</source>
+        <translation>Hunspell'i sõnastikufailid (*.dic)</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
+        <source>Select Syntax Color</source>
+        <translation>Vali süntaksivärv</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SearchBar</name>
+    <message>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
+        <source>Search...</source>
+        <translation>Otsi...</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="125"/>
+        <source>Match Case</source>
+        <translation>Otsi tõstutundlikult</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="132"/>
+        <source>Whole Word</source>
+        <translation>Otsi tervet sõna</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="139"/>
+        <source>Regular Expression</source>
+        <translation>Regulaaravaldis</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="171"/>
+        <source>Search with regex...</source>
+        <translation>Otsi regulaaravaldise alusel...</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="120"/>
+        <source>Next</source>
+        <translation>Järgmine</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="121"/>
+        <source>Previous</source>
+        <translation>Eelmine</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SessionDialog</name>
+    <message>
+        <location filename="../../sessionDialog.ui" line="14"/>
+        <source>Session Manager</source>
+        <translation>Sessioonihaldur</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="101"/>
+        <location filename="../../sessionDialog.ui" line="270"/>
+        <source>&Remove</source>
+        <translation>&Kustuta</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="33"/>
+        <source><b>Save/Restore Session</b></source>
+        <translation><b>Salvesta või taasta sessioon</b></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="56"/>
+        <source>Filter...</source>
+        <translation>Otsi...</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="69"/>
+        <source>Open the selected session(s).</source>
+        <translation>Ava valitud sessioon(id).</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="72"/>
+        <location filename="../../sessionDialog.ui" line="275"/>
+        <source>&Open</source>
+        <translation>&Ava</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="98"/>
+        <location filename="../../sessionDialog.ui" line="108"/>
+        <source>Del</source>
+        <translation>Del</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="115"/>
+        <location filename="../../sessionDialog.ui" line="125"/>
+        <source>Ctrl+Del</source>
+        <translation>Ctrl+Del</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="159"/>
+        <source>By default, all files that are opened in all
+windows will be included in the saved session.</source>
+        <translation>Vaikimisi kuuluvad salvestatud sessiooni
+kõik failid kõikides avatud akendes.</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="163"/>
+        <source>Save only from this &window</source>
+        <translation>Salvesta vaid sellest &aknast</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="180"/>
+        <source><b>Warning</b></source>
+        <translation><b>Hoiatus</b></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="226"/>
+        <location filename="../../session.cpp" line="328"/>
+        <source>&Yes</source>
+        <translation>&Jah</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="233"/>
+        <source>&No</source>
+        <translation>&Ei</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="283"/>
+        <source>Re&name</source>
+        <translation>Muuda &nime</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="118"/>
+        <source>Remove &All</source>
+        <translation>Kustuta k&õik</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="260"/>
+        <source>&Close</source>
+        <translation>Sul&ge</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="135"/>
+        <source>Save the current session under the given title.</source>
+        <translation>Salvesta praegune sessioon valitud nimega.</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="138"/>
+        <source>&Save</source>
+        <translation>&Salvesta</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="149"/>
+        <source>Type a name to save session</source>
+        <translation>Salvestamiseks sisesta sesiooni nimi</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="179"/>
+        <source>Nothing saved.<br>No file was opened.</source>
+        <translation>Me ei salvestanud midagi.<br>Ühtegi faili polnud avatud.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="277"/>
+        <source>No file exists or can be opened.</source>
+        <translation>Faile ei leidu või ei õnnestu avada.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="279"/>
+        <source>Not all files exist or can be opened.</source>
+        <translation>Kõiki faile ei leidu või ei õnnestu avada.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="314"/>
+        <source>&OK</source>
+        <translation>&Sobib</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="333"/>
+        <source>Do you really want to remove all saved sessions?</source>
+        <translation>Kas sa kindlasti soovid kustutada kõik sessioonid?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="339"/>
+        <source>Do you really want to remove the selected sessions?</source>
+        <translation>Kas sa kindlasti soovid kustutada kõik valitud sessioonid?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="341"/>
+        <source>Do you really want to remove the selected session?</source>
+        <translation>Kas sa kindlasti soovid kustutada valitud sessiooni?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="346"/>
+        <source>A session with the same name exists.<br>Do you want to overwrite it?</source>
+        <translation>Sellise nimega sessioon on juba olemas.<br>Kas sa soovid selle asendada?</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SidePane</name>
+    <message>
+        <location filename="../../sidepane.cpp" line="196"/>
+        <source>Filter...</source>
+        <translation>Otsi...</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SpellDialog</name>
+    <message>
+        <location filename="../../spellDialog.ui" line="25"/>
+        <source>Unknown word:</source>
+        <translation>Tundmatu sõna:</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="51"/>
+        <source>Add To Dictionary</source>
+        <translation>Lisa sõnastikku</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="62"/>
+        <source>Replace with:</source>
+        <translation>Asenda:</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="129"/>
+        <source>Correct Once</source>
+        <translation>Paranda üks kord</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="142"/>
+        <source>Correct All</source>
+        <translation>Paranda alati</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="87"/>
+        <source>Ignore Once</source>
+        <translation>Eira üks kord</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="100"/>
+        <source>Ignore All</source>
+        <translation>Eira alati</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::TextEdit</name>
+    <message>
+        <location filename="../../textedit.cpp" line="147"/>
+        <source>Double click to center current line</source>
+        <translation>Rea joondamiseks keskele topeltklõpsa</translation>
+    </message>
+</context>
+</TS>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_fa.ts featherpad-1.0.1/featherpad/data/translations/featherpad_fa.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_fa.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_fa.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>گواهی</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>بی‌نام</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>گزينه‌ها</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>کدگذاری</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>ذخيره‌سازی</translation>
     </message>
@@ -313,7 +313,7 @@
     <message>
         <location filename="../../fp.ui" line="688"/>
         <source>&Line Numbers</source>
-        <translation>شماره خط</translation>
+        <translation>شماره‌ی خط</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="691"/>
@@ -353,7 +353,7 @@
     <message>
         <location filename="../../fp.ui" line="738"/>
         <source>&Preferences</source>
-        <translation>تنظيمات</translation>
+        <translation>تنظيمها</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="741"/>
@@ -492,7 +492,7 @@
         <location filename="../../fp.ui" line="1168"/>
         <location filename="../../fp.ui" line="1171"/>
         <source>Last Active Tab</source>
-        <translation>آخرين برگه فعال</translation>
+        <translation>آخرين برگه‌ی فعال</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1174"/>
@@ -561,12 +561,12 @@
     <message>
         <location filename="../../fp.ui" line="1043"/>
         <source>Ne&xt Tab</source>
-        <translation>برگه بعدی</translation>
+        <translation>برگه‌ی بعدی</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1054"/>
         <source>Previous Ta&b</source>
-        <translation>برگه قبلی</translation>
+        <translation>برگه‌ی قبلی</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1092"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>جايگذاری</translation>
     </message>
@@ -659,17 +659,17 @@
     <message>
         <location filename="../../fp.ui" line="836"/>
         <source>&Cyrillic (CP1251)</source>
-        <translation>&سايريليک (CP1251)</translation>
+        <translation>&سيريليک (CP1251)</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="847"/>
         <source>Cyrillic (&KOI8-U)</source>
-        <translation>سايريليک (&KOI8-U)</translation>
+        <translation>سيريليک (&KOI8-U)</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="858"/>
         <source>Cyrillic (&ISO-8859-5)</source>
-        <translation>سايريليک (&ISO-8859-5)</translation>
+        <translation>سيريليک (&ISO-8859-5)</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="869"/>
@@ -729,7 +729,7 @@
     <message>
         <location filename="../../fp.ui" line="1025"/>
         <source>Close &Other Tabs</source>
-        <translation>بستن ساير برگه‌ها</translation>
+        <translation>بستن برگه‌های ديگر</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1030"/>
@@ -744,12 +744,12 @@
     <message>
         <location filename="../../fp.ui" line="1046"/>
         <source>Alt+Right</source>
-        <translation>Alt+راست</translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1057"/>
         <source>Alt+Left</source>
-        <translation>Alt+چپ</translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1065"/>
@@ -759,7 +759,7 @@
     <message>
         <location filename="../../fp.ui" line="1068"/>
         <source>Alt+Down</source>
-        <translation>Alt+پايين</translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1076"/>
@@ -769,7 +769,7 @@
     <message>
         <location filename="../../fp.ui" line="1079"/>
         <source>Alt+Up</source>
-        <translation>Alt+بالا</translation>
+        <translation></translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1084"/>
@@ -799,461 +799,473 @@
         <translation>جايگزينی همه</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>تازه باز شده</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>بستن</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>ذخيره‌سازی تغييرات؟</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>لطفا به آن پنجره رجوع کنيد يا ديالوگ آن را ببنديد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>سند تغيير يافته است.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>ناديده گرفتن تغييرات</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>لغو</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>نه به همه</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>ذخيره نشده</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>خطها</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>حروف انتخاب‌شده</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>واژه‌ها</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>فرآيند ديگری در اين برگه اجرا می‌شود!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>فايل اسکريپت</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>يک پنجره FeatherPad ديگر ديالوگ محاوره‌ای دارد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>موقعيت:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>عادی</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>فايل موجود نيست.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>بازکردن پيوند</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>رونوشت از پيوند</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>تنها يک فرآيند برای هر برگه مجاز است.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>خروجی اسکريپت</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>پاکسازی</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad فايل‌های بزرگ‌تر از ۱۰۰ مگابايت را باز نمی‌کند.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>فايل(های) غير متنی باز نشد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
-        <translation>تگاه کنيد به تنظيمات ← فايل‌ها ← اجازه‌ی باز کردن فايل‌های غير متنی داده نشود</translation>
+        <translation>نگاه کنيد به تنظيمها ← فايل‌ها ← اجازه‌ی باز کردن فايل‌های غير متنی داده نشود</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>برخی از فايل‌(ها) نمی‌توانند باز شوند!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>شايد مجوز خواندن نداشته باشيد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>فايل(های) ويرايش‌ناپذير!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>فايل‌های غير متنی يا فايل‌هايی با خطهای بسيار زياد ويرايش‌ناپذيرند.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>خطای قبلی تشخيص داده شد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>ترجيحا همه پنجره‌های FeatherPad را ببنديد و دوباره آغاز کنيد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>نمونه‌ی ريشه</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>همه فايل‌‌ها (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>همه فايل‌ها (*)؛؛.%1 فايل (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>بازکردن فايل...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 فايل (*.%1)؛؛همه فايل‌ها (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>ذخيره‌سازی به عنوان...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>حفظ کدگذاری و ذخيره‌سازی به عنوان...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>ذخيره‌سازی به عنوان ريشه.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>در انتظار هويت‌سنجی...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>فايل اجرايی pkexec يافت نشد. لطفا Polkit را نصب کنيد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>آری</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>نه</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>لغو</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>آيا می‌خواهيد از انتهای خطهای <b>ويندوز مايکروسافت</b> استفاده کنيد؟</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>اين کار می‌تواند به خوانايی بيشتر تحت ويندوز کمک کند.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>قابل ذخيره‌سازی نيست!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>راهنما</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>نگارش</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>فايل(های) بسياربزرگ باز نشد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>همه‌ی تب‌ها به فاصله تبديل شدند.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>متن انتخاب‌شده بيش از اندازه طولانی بود.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>همه‌ی آن پردازش نشده است.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>اين فايل در جايی ديگر يا به شيوه‌ای ديگر تغييريافته است!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>لطفا در بارگيری يا ذخيره‌سازی اين سند دقت کنيد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>در حال چاپ کردن...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>چاپ سند</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>چاپ انجام شد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 صفحه</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>رونوشت از مسير مقصد</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>بازکردن مقصد در اينجا</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>رونوشت از مسير مقصد نهايی</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>بازکردن مقصد نهايی در اينجا</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>بازکردن پوشه‌ی فايل</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
-        <translation>نياز به افزودن لغتنامه Hunspell داريد.</translation>
+        <translation>نياز به افزودن لغتنامه‌ی Hunspell داريد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
-        <translation>تنظيمات ← متن ← بررسی تلفظ را مشاهده کنيد!</translation>
+        <translation>تنظيمها ← متن ← بررسی تلفظ را مشاهده کنيد!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
-        <translation>لغتنامه Hunspell وجود ندارد.</translation>
+        <translation>لغتنامه‌ی Hunspell وجود ندارد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
-        <translation>لغتنامه Hunspell شامل فايل ضميمه نيست.</translation>
+        <translation>لغتنامه‌ی Hunspell همراه فايل ضميمه نيست.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>تلفظ اشتباهی در سند وجود ندارد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
-        <translation>تلفظ اشتباهی با شروع از نشانگر متنی وجود ندارد.</translation>
+        <translation>تلفظ نادرستی با شروع از نشانگر متنی وجود ندارد.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>بررسی تلفظ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>برخی از فايل‌ها قابل ذخيره‌سازی نيستند!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>مترجمان</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>يک ويرايشگر سبک و برگه‌دار برای متن ساده</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>بر پايه‌ی Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>نگارنده</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>درباره‌ی FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>بدون جايگذاری</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>يک جايگذاری</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln جايگذاری</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>تنها ۱۰۰۰ جايگزينی نخست رنگی شده‌اند.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>فراتر از محدوديت اندازه برای رنگ‌آميزی نگارش.</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1345,7 +1357,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="14"/>
         <source>Preferences</source>
-        <translation>تنظيمات</translation>
+        <translation>تنظيمها</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="30"/>
@@ -1355,12 +1367,12 @@
     <message>
         <location filename="../../prefDialog.ui" line="69"/>
         <source>Window Settings</source>
-        <translation>تنظيمات پنجره</translation>
+        <translation>تنظيمهای پنجره</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="75"/>
         <source>Remember window &size on closing</source>
-        <translation>يادآوری اندازه پنجره هنگام بستن</translation>
+        <translation>يادآوری اندازه‌ی پنجره هنگام بستن</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="84"/>
@@ -1424,95 +1436,107 @@
         <location filename="../../prefDialog.ui" line="207"/>
         <source>If the menubar is hidden,
 a menu button appears on the toolbar.</source>
-        <translation>اگر نوارمنو پنهان باشد،
+        <translation>اگر نوار منو پنهان باشد،
 يک دکمه منو روی نوار ابزارها ظاهر می‌شود.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="211"/>
         <source>Do not show &menubar</source>
-        <translation>نمايش ندادن نوارمنو</translation>
+        <translation>نمايش ندادن نوار منو</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>ميانبرهای نوار منو با Alt فعال می‌شوند و
+می‌توانند در ميانبرهای تعريف‌شده‌ی کاربر اختلال ايجاد کنند.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>غير فعال کردن ميانبرهای نوار منو</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>پنهان کردن نوار جستجو به صورت پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>به صورت پيشفرض، هر نوار جستجو
-يک تاريخچه مختص به خود دارد.</translation>
+يک تاريخچه‌ی مختص به خود دارد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>استفاده از تاريخچه‌ی مشترک جستجو</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>نمايش هميشگی نوار وضعيت</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>نمايش موقعيت نشانگر در نوار وضعيت</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>پس از بستن اين ديالوگ اثر خواهد کرد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>موقعيت برگه: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>شمال</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>جنوب</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>غرب</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>شرق</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
 Tab navigation with mouse wheel is not affected.</source>
         <translation>به اين معنی که، در زبانهای چپ به راست، Alt+Right پس از فعالسازی آخرين برگه،
-به برگه اول می‌رود، و همينگونه برای Alt+Left.
+به برگه‌ی اول می‌رود، و همينگونه برای Alt+Left.
 
 پيمايش برگه با ماوس تغييری نمی‌کند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>پيمايش برگه‌ها به طرز دوری</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>بستن پنجره هنگام بستن آخرين برگه‌اش</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1524,12 +1548,12 @@
 با اين حال برخی از محيطها گزارش نمی‌دهند که شامل چندين ميزکار هستند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>هميشه در پنجره‌های جداگانه باز شود</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1538,142 +1562,142 @@
 برخی از ميزکارها مانند KDE و LXQt ديالوگ‌های فايل مخصوص به خود دارند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>ديالوگ بومی فايل</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>برای انتخاب Monospace خالی بگذاريد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>يادآوری قلم</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>شامل پرانتز، کروشه، براکت و نقل قول می‌شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>براکت خودکار</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
-        <translation>به صورت پيشفرض، هز سه نقطه با يک ellipsis و هر دو خط تيره با يک خط تيره بلند جايگزين می‌شود.</translation>
+        <translation>به صورت پيشفرض، هز سه نقطه با يک ellipsis و هر دو خط تيره با يک خط تيره‌ی بلند جايگزين می‌شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>جايگزينی سه نقطه و دو خط تيره هنگام نوشتن</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>رنگی کردن همه‌ی نمونه‌های متن انتخاب‌شده
 با در نظر داشتن حروف کوچک و بزرگ و تمام واژه.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>برجسته‌سازی متن انتخاب‌شده</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>برای اين فايل‌ها رنگ‌آميزی نگارش صورت نگيرد > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>يک دکمه‌ی منو در نوار وضعيت برای تغيير نگارش ايجاد می‌شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>امکان تغيير نگارش</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>هنگام رنگ‌آميزی نگارش، فاصله، تب و خطهای عمودی تب نمايش داده شوند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>نمايش فضاهای خالی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>خطهای عمودی موقعيت فقط در صورت ثابت بودن عرض قلم ويرايشگر رسم خواهند شد (مانند Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>نمايش خطهای عمودی که از اين موقعيت شروع می‌شوند:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>همچنين نمايش پايان هر خط و کل سند</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>قالب تاريخ و زمان:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>برخی از ويرايشگر‌های متن نمی‌توانند سندی را که با يک خط خالی تمام نشود باز کنند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>اطمينان از وجود خط پايانی خالی هنگام ذخيره‌سازی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>حذف فاصله‌های انتهايی هنگام ذخيره‌سازی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>پيمايش اينرسی با استفاده از چرخ ماوس</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>فايل‌ها</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>مديريت فايل</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>شروع با فايل‌های آخرين پنجره</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1691,32 +1715,32 @@
 اگر اسکريپت در ترمينال اجرا نشود، خروجی و خطای آن درون يک پنجره‌ی جداگانه نمايش داده می‌شوند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>با اين دستور شروع کن: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>دستور + شناسه‌ها</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>نمايش فايل‌های تازه‌تغييريافته</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>نمايش فايل‌های تازه‌بازشده</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>ذخيره‌سازی تغييرات فايل‌های باز در هر:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>راهنما</translation>
     </message>
@@ -1726,7 +1750,7 @@
         <translation>شروع با صفحه کناری</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1736,57 +1760,57 @@
 ديگر ادغام کنيد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>نمايش ندادن برگه‌ی تنها</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>متن</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>ويرايشگر متن</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>قالب‌بندی خطها به صورت پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>دندانه‌سازی به صورت پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>نمايش هميشگی شماره خط</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>رنگ‌آميزی نگارش به صورت پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>طرح رنگ تيره</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>مقدار رنگ پسزمينه: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> مگابايت</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1798,17 +1822,17 @@
         <translation>اين فقط شامل فايل‌های اجرايی به زبان‌های اسکريپتی مانند Shell یا Python می‌شود.
 
 اگر انتخاب شود و فايل باز شده اجرايی باشد، فايل با کليک روی دکمه Run اجرا می‌شود،
-که در نوارابزار و منوی فايل قرار دارد. همچنين می‌توان کليد ميانبر Ctrl+E را به کار برذ.
+که در نوار ابزار و منوی فايل قرار دارد. همچنين می‌توان کليد ميانبر Ctrl+E را به کار برد.
 سپس، می‌توان فرآيند را توسط Ctrl+Alt+E نابود کرد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>نيازمند بازگشايی پنجره است.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1827,13 +1851,13 @@
 نيازمند بازگشايی پنجره است.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>به کار انداختن اسکريپت‌های اجرايی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1845,8 +1869,8 @@
 نيازمند شروع مجدد برنامه است.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1860,84 +1884,84 @@
 برای MMM dd, yyyy, hh:mm:ss خالی بگذاريد</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>اندازه تَب متن:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> فاصله</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>نشانگر ضخيم متنی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>اگر نشانگر داخل متن باشد، آيا پيمايش با ماوس بايد حالت اينرسی داشته باشد؟</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>بررسی تلفظ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
-        <translation>يک لغتنامه Hunspell نامی دارد که شامل ".dic" می‌شود و همراه با فايل ضميمه‌ای می‌آيد که پسوند ".aff" دارد.</translation>
+        <translation>لغتنامه‌ی Hunspell نامی دارد که شامل ".dic" می‌شود و همراه با فايل ضميمه‌ای می‌آيد که پسوند ".aff" دارد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
-        <translation>مسير لغتنامه Hunspell:</translation>
+        <translation>مسير لغتنامه‌ی Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>افزودن لغتنامه...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>اگر انتخاب نشود، بررسی تلفظ از ابتدای سند شروع می‌شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>بررسی تلفظ از مکان نشانگر متنی</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>تعداد فايل‌های تازه: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>فقط اگر عدد آن بزرگتر از ۵۰ نباشد.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>فقط برای فايل‌هايی که موجود و قابل ذخيره‌سازی هستند.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> دقيقه</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1947,101 +1971,101 @@
         <translation>اگر انتخاب شود، دکمه يا گزينه‌ی منوی ذخيره‌سازی، هنگامی هم
 که فايل بازشده تغيير نيافته باشد، قابل استفاده خواهد بود.
 
-اين کار در برخی از موارد کاربرد دارد، مثلا برای بروزرسانی
+اين در برخی از موارد کاربرد دارد، مثلا برای بروزرسانی
 تاريخ ذخیره‌سازی ياحذف فاصله‌های اضافی از فايل‌ها.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>امکان ذخيره‌سازی فايل‌های تغييرنيافته</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>در عوض، يک هشدار نمايش داده شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>اجازه‌ی باز کردن فايل‌های غير متنی داده نشود</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>به طور پيشفرض، اگر از فايلی رونوشت گرفته شود،
 هنگام چسباندن در ويرايشگر باز می‌شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>چسباندن مسير فايل به جای فايل</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>ميانبرها</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>اقدام</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>ميانبر</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>بازنشانی ميانبرهای پيشفرض.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>رنگ‌آميری نگارش</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>عنصر</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>رنگ متن</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>مقدار رنگ فضاهای خالی:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>تنها اگر شماره‌ی خطها نشان داده شود.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>مقدار رنگ خط جاری:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>بازنشانی رنگ‌آميری نگارش.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>بستن</translation>
     </message>
@@ -2058,111 +2082,111 @@
         <translation>برای تغيير رنگ، دو بار روی آن کليک کنيد.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>فايل</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>فايل</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>هشدار: ميانبری مبهم تشخيض داده شد!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>تابعها، URLها،…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>تابعهای پيشفرض</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>توضيحات درون کد</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>نقل قولها</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>گونه‌ها</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>واژه‌های کليدی</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>عددها</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>عبارتهای منظم، بخشهای ويژه‌ی گنجاندن کد،…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>بخشهای ويژه‌ی گنجاندن سند، عنصرهای XML/HTML،…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>عنوانهای Markdown، مقدارهای CSS،…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>عنصرهای اضافی</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>شروع مجدد برنامه برای اعمال تغييرات لازم است.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>بازگشايی پنجره‌ها برای اعمال تغييرات لازم است.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>تازه بازشده</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>تازه تغييريافته</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>اين ميانبر برای کار ديگری کنار گذاشته شده است.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
-        <translation>فايل‌های لغتنامه Hunspell (*.dic)</translation>
+        <translation>فايل‌های لغتنامه‌ی Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>انتخاب رنگ‌آميری نگارش</translation>
     </message>
@@ -2170,38 +2194,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>جستجو...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>سازگار با بزرگی و کوچکی حروف</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>تمام واژه</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>عبارت منظم</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>جستجو با عبارت منظم...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>بعدی</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>قبلی</translation>
     </message>
@@ -2232,7 +2256,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="69"/>
         <source>Open the selected session(s).</source>
-        <translation>نشست(های) انتخابی باز شود.</translation>
+        <translation>نشست(های) انتخاب‌شده باز شود.</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="72"/>
@@ -2256,7 +2280,7 @@
         <location filename="../../sessionDialog.ui" line="159"/>
         <source>By default, all files that are opened in all
 windows will be included in the saved session.</source>
-        <translation>به صورت پيشفرض، همه فايل‌های باز در همه پنجره‌ها به نشست اضافه می‌شوند.</translation>
+        <translation>به صورت پيشفرض، همه‌ی فايل‌های باز در همه‌ی پنجره‌ها به نشست اضافه می‌شوند.</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="163"/>
@@ -2322,7 +2346,7 @@
     <message>
         <location filename="../../session.cpp" line="279"/>
         <source>Not all files exist or can be opened.</source>
-        <translation>همه فايل‌ها موجود يا قابل بازکردن نيستند.</translation>
+        <translation>همه‌ی فايل‌ها موجود يا قابل بازکردن نيستند.</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="314"/>
@@ -2337,12 +2361,12 @@
     <message>
         <location filename="../../session.cpp" line="339"/>
         <source>Do you really want to remove the selected sessions?</source>
-        <translation>آيا از حذف نشست‌های انتخابی اطمينان داريد؟</translation>
+        <translation>آيا از حذف نشست‌های انتخاب‌شده اطمينان داريد؟</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="341"/>
         <source>Do you really want to remove the selected session?</source>
-        <translation>آيا از حذف نشست انتخابی اطمينان داريد؟</translation>
+        <translation>آيا از حذف نشست انتخاب‌شده اطمينان داريد؟</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="346"/>
@@ -2353,7 +2377,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>فيلتر...</translation>
     </message>
@@ -2378,7 +2402,7 @@
     <message>
         <location filename="../../spellDialog.ui" line="129"/>
         <source>Correct Once</source>
-        <translation>اصلاح يک مرتبه‌ای</translation>
+        <translation>اصلاح يکباره</translation>
     </message>
     <message>
         <location filename="../../spellDialog.ui" line="142"/>
@@ -2388,7 +2412,7 @@
     <message>
         <location filename="../../spellDialog.ui" line="87"/>
         <source>Ignore Once</source>
-        <translation>ناديده گرفتن يک مرتبه‌ای</translation>
+        <translation>ناديده گرفتن يکباره</translation>
     </message>
     <message>
         <location filename="../../spellDialog.ui" line="100"/>
@@ -2399,7 +2423,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>کليک دوگانه برای نشان دادن خط جاری</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_fi.ts featherpad-1.0.1/featherpad/data/translations/featherpad_fi.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_fi.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_fi.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,33 +4,33 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
-        <translation type="unfinished"></translation>
+        <translation>Lisenssi</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
-        <translation type="unfinished"></translation>
+        <translation>Nimetön</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="71"/>
         <source>Go to line:</source>
-        <translation type="unfinished"></translation>
+        <translation>Siirry riville:</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="107"/>
@@ -41,51 +41,51 @@
     <message>
         <location filename="../../fp.ui" line="111"/>
         <source>Select Text</source>
-        <translation type="unfinished"></translation>
+        <translation>Valitse teksti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="114"/>
         <source>Ctrl+Shift+J</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+J</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="149"/>
         <source>&File</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tiedosto</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="189"/>
         <location filename="../../fp.ui" line="980"/>
         <source>&Edit</source>
-        <translation type="unfinished"></translation>
+        <translation>&Muokkaa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="219"/>
         <source>&Options</source>
-        <translation type="unfinished"></translation>
+        <translation>&Asetukset</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
-        <translation type="unfinished"></translation>
+        <translation>Koodaus</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="282"/>
         <source>&Search</source>
-        <translation type="unfinished"></translation>
+        <translation>&Haku</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="290"/>
         <location filename="../../fp.ui" line="746"/>
         <source>&Help</source>
-        <translation type="unfinished"></translation>
+        <translation>&Ohje</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="390"/>
         <source>Find:</source>
-        <translation type="unfinished"></translation>
+        <translation>Etsi:</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="406"/>
@@ -95,7 +95,7 @@
     <message>
         <location filename="../../fp.ui" line="419"/>
         <source>Replace with:</source>
-        <translation type="unfinished"></translation>
+        <translation>Korvaa:</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="435"/>
@@ -105,99 +105,99 @@
     <message>
         <location filename="../../fp.ui" line="494"/>
         <source>&New</source>
-        <translation type="unfinished"></translation>
+        <translation>&Uusi</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="497"/>
         <source>New tab</source>
-        <translation type="unfinished"></translation>
+        <translation>Uusi välilehti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="500"/>
         <source>Ctrl+N</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+N</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="505"/>
         <source>&Open</source>
-        <translation type="unfinished"></translation>
+        <translation>&Avaa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="508"/>
         <source>Open a file</source>
-        <translation type="unfinished"></translation>
+        <translation>Avaa tiedosto</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="511"/>
         <source>Ctrl+O</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+O</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tallenna</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="522"/>
         <source>Save the current tab</source>
-        <translation type="unfinished"></translation>
+        <translation>Tallenna nykyinen välilehti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="525"/>
         <source>Ctrl+S</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+S</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="533"/>
         <source>&Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>&Kumoa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="536"/>
         <source>Undo</source>
-        <translation type="unfinished"></translation>
+        <translation>Kumoa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="539"/>
         <source>Ctrl+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Z</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="547"/>
         <source>&Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tee uudelleen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="550"/>
         <source>Redo</source>
-        <translation type="unfinished"></translation>
+        <translation>Tee uudelleen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="553"/>
         <source>Ctrl+Shift+Z</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+Z</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="561"/>
         <location filename="../../fp.ui" line="564"/>
         <source>Reload</source>
-        <translation type="unfinished"></translation>
+        <translation>Lataa uudelleen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="567"/>
         <source>Ctrl+Shift+R</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+R</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="572"/>
         <source>&Find</source>
-        <translation type="unfinished"></translation>
+        <translation>&Etsi</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="578"/>
         <source>Ctrl+F</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+F</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="586"/>
@@ -207,27 +207,27 @@
     <message>
         <location filename="../../fp.ui" line="589"/>
         <source>Ctrl+R</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+R</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="594"/>
         <source>Save &As</source>
-        <translation type="unfinished"></translation>
+        <translation>Tallenna &nimellä</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="597"/>
         <source>Ctrl+Shift+S</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="602"/>
         <source>&Print</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tulosta</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="605"/>
         <source>Ctrl+P</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="610"/>
@@ -237,87 +237,87 @@
     <message>
         <location filename="../../fp.ui" line="613"/>
         <source>Ctrl+Shift+D</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+D</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="618"/>
         <source>&Close</source>
-        <translation type="unfinished"></translation>
+        <translation>&Sulje</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="621"/>
         <source>Ctrl+Shift+Q</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+Q</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="626"/>
         <source>&Quit</source>
-        <translation type="unfinished"></translation>
+        <translation>&Lopeta</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="629"/>
         <source>Ctrl+Q</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Q</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="637"/>
         <source>&Cut</source>
-        <translation type="unfinished"></translation>
+        <translation>&Leikkaa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="640"/>
         <source>Ctrl+X</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+X</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="648"/>
         <source>C&opy</source>
-        <translation type="unfinished"></translation>
+        <translation>&Kopioi</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="651"/>
         <source>Ctrl+C</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+C</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="656"/>
         <source>&Paste</source>
-        <translation type="unfinished"></translation>
+        <translation>&Liitä</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="659"/>
         <source>Ctrl+V</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+V</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="667"/>
         <source>&Delete</source>
-        <translation type="unfinished"></translation>
+        <translation>&Poista</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="672"/>
         <source>&Select All</source>
-        <translation type="unfinished"></translation>
+        <translation>&Valitse kaikki</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="675"/>
         <source>Ctrl+A</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+A</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="680"/>
         <source>&Font</source>
-        <translation type="unfinished"></translation>
+        <translation>&Fontti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="688"/>
         <source>&Line Numbers</source>
-        <translation type="unfinished"></translation>
+        <translation>&Rivinumero</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="691"/>
         <source>Ctrl+L</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+L</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="702"/>
@@ -327,7 +327,7 @@
     <message>
         <location filename="../../fp.ui" line="705"/>
         <source>Ctrl+W</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+W</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="716"/>
@@ -337,7 +337,7 @@
     <message>
         <location filename="../../fp.ui" line="719"/>
         <source>Ctrl+I</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+I</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="730"/>
@@ -347,27 +347,27 @@
     <message>
         <location filename="../../fp.ui" line="733"/>
         <source>Ctrl+Shift+H</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+H</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="738"/>
         <source>&Preferences</source>
-        <translation type="unfinished"></translation>
+        <translation>&Asetukset</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="741"/>
         <source>Ctrl+Shift+P</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="749"/>
         <source>Ctrl+H</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+H</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="754"/>
         <source>&About</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tietoja</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="781"/>
@@ -392,7 +392,7 @@
     <message>
         <location filename="../../fp.ui" line="975"/>
         <source>Ctrl+J</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+J</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="983"/>
@@ -402,17 +402,17 @@
     <message>
         <location filename="../../fp.ui" line="986"/>
         <source>Ctrl+Shift+E</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+E</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1089"/>
         <source>&Run</source>
-        <translation type="unfinished"></translation>
+        <translation>&Suorita</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1095"/>
         <source>Ctrl+E</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+E</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1100"/>
@@ -437,7 +437,7 @@
     <message>
         <location filename="../../fp.ui" line="1114"/>
         <source>Ctrl+M</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+M</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1119"/>
@@ -447,7 +447,7 @@
     <message>
         <location filename="../../fp.ui" line="1122"/>
         <source>Ctrl+Alt+P</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Alt+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1127"/>
@@ -457,7 +457,7 @@
     <message>
         <location filename="../../fp.ui" line="1130"/>
         <source>Ctrl+Shift+V</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+V</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1135"/>
@@ -468,7 +468,7 @@
     <message>
         <location filename="../../fp.ui" line="1141"/>
         <source>Ctrl+Shift+U</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+U</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1146"/>
@@ -479,7 +479,7 @@
     <message>
         <location filename="../../fp.ui" line="1152"/>
         <source>Ctrl+Shift+L</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Shift+L</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1157"/>
@@ -496,7 +496,7 @@
     <message>
         <location filename="../../fp.ui" line="1174"/>
         <source>F1</source>
-        <translation type="unfinished"></translation>
+        <translation>F1</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1179"/>
@@ -518,13 +518,13 @@
     <message>
         <location filename="../../fp.ui" line="1198"/>
         <source>F2</source>
-        <translation type="unfinished"></translation>
+        <translation>F2</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1203"/>
         <location filename="../../fp.ui" line="1206"/>
         <source>Save All Files</source>
-        <translation type="unfinished"></translation>
+        <translation>Tallenna kaikki tiedostot</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1211"/>
@@ -545,7 +545,7 @@
     <message>
         <location filename="../../fp.ui" line="997"/>
         <source>Ctrl+T</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+T</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1010"/>
@@ -560,12 +560,12 @@
     <message>
         <location filename="../../fp.ui" line="1043"/>
         <source>Ne&xt Tab</source>
-        <translation type="unfinished"></translation>
+        <translation>&Seuraava välilehti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1054"/>
         <source>Previous Ta&b</source>
-        <translation type="unfinished"></translation>
+        <translation>&Edellinen välilehti</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1092"/>
@@ -609,9 +609,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation type="unfinished"></translation>
     </message>
@@ -623,7 +623,7 @@
     <message>
         <location filename="../../fp.ui" line="583"/>
         <source>&Replace</source>
-        <translation type="unfinished"></translation>
+        <translation>&Korvaa</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="765"/>
@@ -633,27 +633,27 @@
     <message>
         <location filename="../../fp.ui" line="773"/>
         <source>&Other</source>
-        <translation type="unfinished"></translation>
+        <translation>&Muu</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="792"/>
         <source>&UTF-8</source>
-        <translation type="unfinished"></translation>
+        <translation>&UTF-8</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="803"/>
         <source>UTF-&16</source>
-        <translation type="unfinished"></translation>
+        <translation>UTF-&16</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="814"/>
         <source>&ISO-8859-1</source>
-        <translation type="unfinished"></translation>
+        <translation>&ISO-8859-1</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="825"/>
         <source>&Windows-1252</source>
-        <translation type="unfinished"></translation>
+        <translation>&Windows-1252</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="836"/>
@@ -797,449 +797,461 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation type="unfinished">
             <numerusform></numerusform>
@@ -1247,12 +1259,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1260,13 +1272,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation type="unfinished"></translation>
@@ -1430,63 +1442,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1494,17 +1517,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1513,12 +1536,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1526,141 +1549,141 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1674,32 +1697,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1709,7 +1732,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1717,57 +1740,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1779,13 +1802,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1797,13 +1820,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1812,8 +1835,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1823,84 +1846,84 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1910,96 +1933,96 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2015,111 +2038,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2127,38 +2150,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2195,19 +2218,19 @@
         <location filename="../../sessionDialog.ui" line="72"/>
         <location filename="../../sessionDialog.ui" line="275"/>
         <source>&Open</source>
-        <translation type="unfinished"></translation>
+        <translation>&Avaa</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="98"/>
         <location filename="../../sessionDialog.ui" line="108"/>
         <source>Del</source>
-        <translation type="unfinished"></translation>
+        <translation>Del</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="115"/>
         <location filename="../../sessionDialog.ui" line="125"/>
         <source>Ctrl+Del</source>
-        <translation type="unfinished"></translation>
+        <translation>Ctrl+Del</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="159"/>
@@ -2229,7 +2252,7 @@
         <location filename="../../sessionDialog.ui" line="226"/>
         <location filename="../../session.cpp" line="328"/>
         <source>&Yes</source>
-        <translation type="unfinished"></translation>
+        <translation>&Kyllä</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="233"/>
@@ -2249,7 +2272,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="260"/>
         <source>&Close</source>
-        <translation type="unfinished"></translation>
+        <translation>&Sulje</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="135"/>
@@ -2259,7 +2282,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="138"/>
         <source>&Save</source>
-        <translation type="unfinished"></translation>
+        <translation>&Tallenna</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="149"/>
@@ -2284,7 +2307,7 @@
     <message>
         <location filename="../../session.cpp" line="314"/>
         <source>&OK</source>
-        <translation type="unfinished"></translation>
+        <translation>&OK</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="333"/>
@@ -2310,7 +2333,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2330,7 +2353,7 @@
     <message>
         <location filename="../../spellDialog.ui" line="62"/>
         <source>Replace with:</source>
-        <translation type="unfinished"></translation>
+        <translation>Korvaa:</translation>
     </message>
     <message>
         <location filename="../../spellDialog.ui" line="129"/>
@@ -2356,7 +2379,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_fr.ts featherpad-1.0.1/featherpad/data/translations/featherpad_fr.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_fr.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_fr.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licence</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Sans titre</translation>
     </message>
@@ -61,9 +61,9 @@
         <translation>&Options</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Encodage</translation>
     </message>
@@ -130,7 +130,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Enregistrer</translation>
     </message>
@@ -486,7 +486,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Première lettre en majuscule</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -536,7 +536,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>Tabulations en espaces</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -615,9 +615,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Remplacement</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Tout remplacer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Ouvert récemment</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Fermer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Enregistrer les changements ?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Veuillez vous occuper de cette fenêtre ou fermez simplement la boîte de dialogue !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Annuler les &modifications</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Annuler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Non à tout</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Non sauvegardé</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Lignes</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Nb carac. sél.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Mots</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Un autre processus a été lancé dans cet onglet !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Fichier de script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Une autre fenêtre de FeatherPad a une boite de dialogue modale !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Position :</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Le fichier n'existe pas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Le document a été modifié.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Ouvrir le lien</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Copier le lien</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Un seul processus est autorisé par onglet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Résultats du script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Vider</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
-        <translation type="unfinished">Les fichiers non texte ne sont pas ouverts!</translation>
+        <translation>Les fichiers non texte ne sont pas ouverts !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
-        <translation type="unfinished">Voir Préférences → Fichiers → Ne pas autoriser l'ouverture de fichiers non texte</translation>
+        <translation>Voir Préférences → Fichiers → Ne pas autoriser l'ouverture de fichiers non texte</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Certains fichiers n'ont pas pu être ouverts !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Vous n'avez par les droits en lecture.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Fichier(s) non modifiable(s) !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Les fichiers non textuels ou contenant de trop grandes lignes ne peuvent pas être modifiés.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instance root</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation>Enregistrer en tant que root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>En attente d'authentification ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec" est introuvable. Veuillez installer Polkit !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Annuler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Les tabulations sont converties en espaces.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Le texte sélectionné était trop long.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished">Ce n'est pas entièrement traité.</translation>
+        <translation>Ce n'est pas entièrement traité.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Ce fichier a été modifié ailleurs et par un autre moyen !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Soyez prudent lors du chargement ou de l'enregistrement de ce document !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>Impression en cours...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impression terminée.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Pages</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Copier le chemin de la cible</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Ouvrir ici la cible</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Copier le chemin final de la cible</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Ouvrir le chemin final de la cible</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished">Ouvrir dossier contenant</translation>
+        <translation>Ouvrir dossier contenant</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Vous devez ajouter un dictionnaire Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Voir Préférences → Texte → Vérification de l'orthographe !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Le dictionnaire Hunspell n'existe pas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Le dictionnaire Hunspell n'est pas accompagné de son fichier affixe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Pas de fautes d'orthographes dans le document.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Pas de fautes d'orthographe depuis le curseur.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Vérification de l'orthographe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Un ou plusieurs fichiers ne peuvent pas être sauvegardé(s) !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Traducteurs</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Un éditeur de texte simple, léger, à onglets</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>alias</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad ne peut pas ouvrir les fichiers de plus de 100 Mio.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Plantage antérieur détecté !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Si possible, fermez toutes les fenêtres de FeatherPad et redémarrer !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Tous les fichiers (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Tous les fichiers (*);;.%1 Fichiers (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Ouvrir fichier...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Fichiers (*.%1);;Tous les fichiers (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Enregistrer sous...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Conserver l'encodage et enregistrer sous...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Oui</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Non</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Voulez-vous utiliser les fins de ligne <b>MS Windows</b> ?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Peut être bénéfique pour la lisibilité sous MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Sauvegarde impossible !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Aide</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntaxe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Fichier(s) volumineux non ouvert(s) !</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Imprimer le document</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>basé sur Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Auteur</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>À propos de FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Aucun remplacement</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Un remplacement</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln remplacement</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Les 1000 premiers remplacements sont surlignés.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>La limite accordée à la coloration syntaxique a été atteinte.</translation>
     </message>
@@ -1262,14 +1274,14 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>Afficher ou non les fichiers cachés</translatorcomment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>Afficher ou non les fichiers cachés</translatorcomment>
@@ -1437,64 +1449,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Les accélérateurs de la barre de menus sont activés par Alt
+et peuvent interférer avec les raccourcis personnalisés.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished">Désactiver les accélérateurs de la barre de menus</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Masquer la &barre de recherche par défaut</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Par défaut chaque recherche
 a un historique différent.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Utiliser un historique de recherche partagé</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Toujours afficher la barre d'ét&at</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Afficher la position du curseur sur la barre d'état</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Prendra effet après la fermeture de la boîte de dialogue.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
-        <translation>Emplacement des onglets: </translation>
+        <translation>Emplacement des onglets : </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Nord</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Sud</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Ouest</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Est</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1505,17 +1529,17 @@
 La navigation par onglets avec la souris n'est pas concernée.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Rot&ation de la navigation par onglets</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Fermer la fenêtre à la fermeture du dernier onglet</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1529,12 +1553,12 @@
 n'indiquent pas qu'ils ont des bureaux multiples.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Toujours ouvrir dans des fenêtres séparées</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1545,32 +1569,32 @@
 Certains environnnements de bureau, comme KDE et LXQt, disposent de leurs propres boîtes de dialogue.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Boîte de dialogue des fichiers native</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Décocher pour Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Garder en mémoire la &police</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Concerne les parenthèses, accolades, et guillemets.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Parenthésage automatique</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1579,114 +1603,114 @@
 dans les cas appropriés.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Remplacer trois points et traits d'union doubles en cours d'écriture</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished">Mettez en évidence les correspondances sensibles à la casse et entières
+        <translation>Mettre en évidence les correspondances sensibles à la casse et entières
 du texte sélectionné.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished">Mettre en évidence la sélection</translation>
+        <translation>Mettre en évidence la sélection</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Pas de coloration syntaxique pour les fichiers > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Affichera une bouton sur la barre d'état
 pour permettre la modification de la syntaxe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Support de la modification syntaxique</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Afficher les espaces, les tabulations et lignes de tabulation
 quand la syntaxe est colorée.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Afficher les espaces blancs</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Les lignes de position verticale s'afficheront
 uniquement si la police a une taille constante (comme Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Afficher des lignes verticales depuis cette position :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Afficher également la fin de ligne et de document</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Format de la date et de l'heure :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Certains éditeurs de texte ne peuvent ouvrir un document
 dont la dernière ligne n'est pas vide.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Conserver une dernière ligne vide lors de l'enregistrement</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Supprimer les espaces de fin à l'enregistrement</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Défilement inertiel de la roulette de la souris</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Fichiers</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Gestion des fichiers</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Démarrer une session avec les derniers fichiers ouverts</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1709,32 +1733,32 @@
 seront affichés dans une boîte de dialogue popup.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
-        <translation>Lancer avec la commande: </translation>
+        <translation>Lancer avec la commande : </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Commande + Arguments</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Afficher les fichiers récemment &modifiés</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Afficher les fichiers récemment &ouverts</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Enregistrer les modifications des fichiers ouverts toutes les :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Aide</translation>
     </message>
@@ -1744,7 +1768,7 @@
         <translation>Démarrer avec le mode panneau latéral</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1755,57 +1779,57 @@
 une autre en glissant-déposant un onglet.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Ne pas afficher un onglet unique</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Texte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Éditeur de texte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Retour à la ligne par défaut</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Indentation auto&matique par défaut</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Toujours afficher les &numéros de ligne</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Coloration s&yntaxique par défaut</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Jeu de c&ouleur sombre</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
-        <translation>Valeur de la couleur d'arrière-plan: </translation>
+        <translation>Valeur de la couleur d'arrière-plan : </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> Mio</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1824,13 +1848,13 @@
 Par la suite, le processus pourra être arrêté avec Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Nécessite la réouverture de la fenêtre pour être activé.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1843,19 +1867,19 @@
 255 pour le blanc et 0 pour le noir.
 
 Pour les arrière-plans clairs, elle peut être
-comprise entre 230 et 255; pour les arrière-plans
+comprise entre 230 et 255&#x202f;; pour les arrière-plans
 sombres, entre 0 et 50.
 
 Nécessite la réouverture de la fenêtre pour être activé.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Lance des scripts exécutables</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1867,8 +1891,8 @@
 Nécessite le redémarrage de l'application pour être activé.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1879,39 +1903,39 @@
 
 Prendra effet après la fermeture de cette fenêtre.
 
-Laisser vide pour:
+Laisser vide pour :
 MMM jj, aaaa, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Taille du texte des onglets :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> espaces</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Curseur de texte épais</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Le défilement de la roulette de la souris
 doit-il être inertiel si le curseur se trouve dans la vue du texte ?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Vérification de l'orthographe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1920,51 +1944,51 @@
 nom mais se terminant par ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Chemin vers le dictionnaire Hunspell :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Ajouter un dictionnaire...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Si cette case n'est pas cochée, la vérification orthographique
 démarrera au début du document.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Démarrer la vérification de l'orthographe depuis le curseur</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
-        <translation>Nombre de fichiers récents: </translation>
+        <translation>Nombre de fichiers récents : </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Uniquement s'il y en a moins de 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Uniquement pour les fichiers existants qui peuvent être sauvegardés.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1979,97 +2003,97 @@
 de fin de ligne d'un fichier texte.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Permettre l'enregistrement de fichiers non modifiés</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Affiche un avertissement à la place.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Ne pas permettre l'ouverture de fichier n'étant pas de type texte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Par défaut, lorsque les fichiers sont copiés, ils
 seront ouverts s'ils sont collés dans FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Coller le chemin plutôt que le fichier</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Raccourcis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Raccourci</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Rétablir les raccourcis par défaut.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Défaut</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Couleurs de la syntaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Élément</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Couleur du texte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished">Valeur de couleur des espaces blancs :</translation>
+        <translation>Valeur de couleur des espaces blancs :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>N'a d'effet que si les numéros de ligne sont affichés.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Valeur de surbrillance de la ligne actuelle :</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Restaurez les couleurs de syntaxe par défaut.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Fermer</translation>
     </message>
@@ -2086,111 +2110,111 @@
         <translation>Double-cliquer sur une couleur pour la modifier.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>fichiers</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>fichier</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
-        <translation>Attention: raccourci ambigu détecté !</translation>
+        <translation>Attention : raccourci ambigu détecté !</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Fonctions, URL,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Fonctions intégrées</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Commenter</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citations</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
-        <translation type="unfinished">Types</translation>
+        <translation>Types</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Mots clés</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Nombres</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Expressions régulières, blocs de code,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
-        <translation type="unfinished">Blocs de document, éléments XML/HTML,…</translation>
+        <translation>Blocs de document, éléments XML/HTML,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
-        <translation type="unfinished">Noter les en-têtes, les valeurs CSS,…</translation>
+        <translation>Noter les en-têtes, les valeurs CSS,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Éléments supplémentaires</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Le redémarrage de l'application est nécessaire pour valider les changements.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>La réouverture de la fenêtre est nécessaire pour valider les changements.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Récemment ouvert</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Récemment &Modifié</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Le raccourci entré est déjà réservé.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Fichier(s) de dictionnaire(s) Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Sélectionnez la couleur de la syntaxe</translation>
     </message>
@@ -2198,38 +2222,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Rechercher...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Respecter la casse</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Mot entier</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Expression régulière</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Rechercher avec regex...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Suivant</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Précédent</translation>
     </message>
@@ -2382,7 +2406,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtrer...</translation>
     </message>
@@ -2428,7 +2452,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Double clic pour centrer la ligne utilisée</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_he.ts featherpad-1.0.1/featherpad/data/translations/featherpad_he.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_he.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_he.ts	2021-10-15 02:56:34.000000000 +0200
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<TS version="2.1" language="he-IL">
+<TS version="2.1" language="he_IL">
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>רישיון</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>ללא שם</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&אפשרויות</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>קידוד</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&שמירה</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>החלפה</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>להחליף הכול</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>נפתחו ל&אחרונה</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>סגירה</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>לשמור שינויים?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>נא להתייחס לחלון הזה או פשוט לסגור את תיבת הדו־שיח שלו!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>המסמך נערך.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>הת&עלמות מהשינויים</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&ביטול</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>לא לה&כול</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>לא נשמר</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>שורות</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>תווים נבחרים</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>מילים</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>תהליך אחר פועל בלשונית הזו!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>קובץ סקריפט</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>בחלון אחר של FeatherPad נפתחה תיבת דו־שיח חוסמת!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>מיקום:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>רגיל</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>קובץ זה אינו קיים.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>פתיחת קישור</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>העתקת קישור</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>מותר רק תהליך אחד לכל לשונית.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>פלט סקריפט</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>פינוי</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad אינו פותח קבצים בגודל של מעל ‎100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>קבצים שאינם טקסט לא נפתחו!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>יש לעיין בהעדפות ← קבצים ← לא להרשות פתיחת קבצים שאינם טקסט</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>לא ניתן לפתוח מספר קבצים!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>ייתכן ואין לך הרשאה לקריאה.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>קבצים שאינם פתוחים לעריכה!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>אי אפשר לערוך קבצים שאינם טקסט או קבצים עם שורות ארוכות במיוחד.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>זוהתה התרסקות קודמת!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>עדיף לסגור את החלונות של FeatherPad ולהתחיל שוב!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>עותק משתמש על</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>כל הקבצים (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>כל הקבצים (*);;קובצי ‎.%1 ‏(‎*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>פתיחת קובץ…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>קובצי ‎.%1‏ (‎*.%1);;כל הקבצים (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>שמירה בשם…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>לשמר את הקידוד ולשמור בשם…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>מתבצעת שמירה כמשתמש על.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>בהמתנה לאימות…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>„pkexec” לא נמצא. נא להתקין את Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>כן</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>לא</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>ביטול</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>להשתמש בסיומות שורה בסגנון <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>עשוי להקל על הקריאה עם MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>אי אפשר לשמור!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>עזרה</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>תחביר</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>קובצי ענק לא נפתחו!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>טאבים בטקסט מומרים לרווחים.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>הטקסט הנבחר היה ארוך מדי.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>הוא לא עובד במלואו.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>הקובץ נערך במקום אחר או בדרך אחרת!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>נא להיזהר ברענון או שמירת המסמך הזה!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>מתבצעת הדפסה…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>הדפסת המסמך</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>ההדפסה הושלמה.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 דפים</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>העתקת נתיב היעד</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>לפתוח את היעד כאן</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>העתקת נתיב היעד הסופי</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>פתיחת היעד הסופי להלן</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>לפתוח את התיקייה המכילה</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>עליך להוסיף מילון Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>מוטב לגשת אל העדפות ← טקסט ← בדיקת איות!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>מילון Hunspell לא קיים.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>מילון ה־Hunspell לא מלווה בקובץ מוספית.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>אין שגיאות איות במסמך.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>אין שגיאות איות בסמן הטקסט.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>בדיקת איות</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>לא ניתן לשמור חלק מהקבצים!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>מתרגמים</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>עורך טקסט פשוט, קליל ומסודר בלשוניות</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>מבוסס על Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>יוצר</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>ידוע גם בתור</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>על אודות FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>אין החלפה</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>החלפה אחת</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>החלפה אחת</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>1000 ההחלפות הראשונות מודגשות.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>חרגת ממגבלת גודל הדגשת התחביר.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.‎</translation>
@@ -1435,64 +1447,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>את מקשי ההאצה של סרגל התפריטים אפשר להפעיל עם Alt
+והם עשויים להפריע למקשי קיצור שהותאמו אישית.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>השבתת מקשי האצה של סרגל תפריטים</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>להסתיר את סרגל החיפוש כ&בררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>כבררת מחדל, לכל רשומת חיפוש
 יש היסטוריית חיפוש נפרדת.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>להשתמש בהיסטוריית חיפוש שיתופית</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>תמיד להציג סרגל מ&צב</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>להציג את מיקום הסמן בסרגל המצב</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>השינוי יחול לאחר סגירת תיבת הדו־שיח.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>מיקום הלשוניות: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>צפון</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>דרום</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>מערב</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>מזרח</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1527,17 @@
 ניווט בלשוניות עם גלגלת העכבר לא ישתנה.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>ניווט בין לשוניות &גולש בחזרה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>לסגור את החלון עם סגירת הלשונית האחרונה בו</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1550,12 @@
 שלא לדווח שהן מחזיקות מספר שולחנות עבודה.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>תמיד לפתוח בחלונות נפרדים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1542,32 +1566,32 @@
 חלק מסביבות העבודה כגון KDE ו־LXQt מספקות תיבות דו שיח לבחירת קבצים.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>תיבת דו־שיח קבצים טבעית</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>לבטל סימון לרוחב אחיד.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>ל&זכור את הגופן</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>כולל סוגריים רגילים, מסולסלים, מרובעים וציטטות.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&סגירה אוטומטית</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1576,114 +1600,114 @@
 תחת תנאים מתאימים.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>החלפת שלוש נקודות ומינוסים כפולים בזמן ההקלדה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>להדגיש התאמות תלויות רישיות ומלאות
 של הטקסט הנבחר.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>הדגשת בחירה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>אף פעם לא להדגיש תחביר לקבצים > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>יוצר כפתור תפריט בסרגל
 המצב לשינוי התחביר.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>תמיכה בדריסת תחביר</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>להציג רווחים, טאבים ושורות טאב
 כאשר מופעלת הדגשת תחביר.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>להציג רווחים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>קווי המיקום האנכי יצוירו רק עם אותיות גופן העורך הן
 באותו הרוחב (כגון רוחב אחיד).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>להציג שורות אנכיות החל מהמיקום הזה:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>להציג גם סיומות שורה ומסמך</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>תצורת תאריך ושעה:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>חלק מעורכי הטקסט לא יכולים לפתוח
 מסמך שהשורה האחרונה שלו אינה ריקה.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>לוודא שיש שורה ריקה בסוף עם השמירה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>להסיר רווח מהסוף בעת שמירה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>גלילה מתמידה עם גלגלת העכבר</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>קבצים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>ניהול קבצים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>התחלה עם הקבצים של החלון האחרון</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1706,32 +1730,32 @@
 דו־שיח קופצת.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>להתחיל עם הפקודה שלהלן: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>פקודה + ארגומנטים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>להציג את הקבצים שנערכו ל&אחרונה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>להציג קבצים שנפתחו ל&אחרונה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>שמירת השינויים בקבצים הפתוחים בכול:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>עזרה</translation>
     </message>
@@ -1741,7 +1765,7 @@
         <translation>להתחיל במצב סרגל צד</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1751,57 +1775,57 @@
 למזג חלון אחד עם לשוניות לתוך חלון אחר בגרירה והשלכה.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&לא להציג לשונית יחידה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>טקסט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>עורך טקסט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&גלישת שורות כבררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>לה&זיח אוטומטית כבררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>תמיד להציג מ&ספרי שורות</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>ה&דגשת תחביר כבררת מחדל</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>ערכת &צבעים כהה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>ערך צבע רקע: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1820,13 +1844,13 @@
 Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>פתיחת החלון מחדש נחוצה בשביל הכנסת השינויים לתוקף.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1845,13 +1869,13 @@
 השינויים.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>הרצת סקריפטים שניתן להריץ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1864,8 +1888,8 @@
 ייכנסו לתוקף.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1880,35 +1904,35 @@
 MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>גודל טאב טקסט:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> רווחים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>סמן טקסט עבה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>האם גלילת העכבר צריכה להיות מתמדת
 אם הסמן בתוך תצוגת הטקסט?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>בדיקת איות</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1916,51 +1940,51 @@
 קובץ מוספית עם אותו השם אך עם הסיומת „‎.aff”.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>נתיב מילון Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>הוספת מילון…</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>אם האפשרות הזאת אינה מסומנת, בדיקת איות
 תחל עם פתיחת המסמך.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>להתחיל בדיקת איות מסמן הטקסט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>מספר הקבצים האחרונים: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>רק אם המספר שלהם אינו עולה על 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>רק עבור קבצים שקיימים וניתן לשמור אותם.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> דקות</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1974,97 +1998,97 @@
 חותמת הזמן או הסרת הרווחים ההתחלתיים בקובץ טקסט.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>לאפשר שמירת קבצים שלא השתנו</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>להציג אזהרה במקום.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>לא לאפשר פתיחת קבצים שאינם טקסט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>כברירת המחדל, כאשר קבצים יועתקו, הם
 ייפתחו אם הם יודבקו לתוך FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>הדבקת נתיבים במקום קבצים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>קיצורים</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>פעולה</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>קיצור</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>שחזור קיצורי ברירת המחדל.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>ברירת מחדל</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>צבעי תחביר</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>אלמנט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>צבע הטקסט</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>ערך צבע רווח:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>תקף רק אם מופיעים מספרי שורות.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>ערך הדגשת השורה הנוכחית:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>שחזור צבעי התחביר כבררת מחדל.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>סגירה</translation>
     </message>
@@ -2081,111 +2105,111 @@
         <translation>יש ללחוץ על צבע לחיצה כפולה כדי לשנות אותו.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>קבצים</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>קובץ</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>אזהרה: התגלה קיצור דרך דו־משמעי!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>פונקציות, כתובות, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>פונקציות מובנות</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>הערות</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>ציטוטים</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>סוגים</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>מילות מפתח</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>מספרים</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>ביטויים רגולריים, מקטעי קוד, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>מקטעי מסמך, רכיבי XML/HTML, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>כותרות Markdown, ערכי CSS, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>אלמנטים נוספים</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>הפעלת היישום מחדש נחוצה כדי להכניס השינויים לתוקף.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>פתיחת החלון מחדש נחוצה כדי להכניס את השינויים לתוקף.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>נפתחו ל&אחרונה</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>נ&ערכו לאחרונה</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>קיצור הדרך שהוקלד נשמר.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>קובצי מילון Hunspell‏ (‎*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>בחירת צבע תחביר</translation>
     </message>
@@ -2193,38 +2217,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>חיפוש...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>התאמת רישיות</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>מילה שלמה</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>ביטוי רגולרי</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>חיפוש עם ביטוי רגולרי…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>אחורה</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>אחורה</translation>
     </message>
@@ -2377,7 +2401,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>סינון…</translation>
     </message>
@@ -2423,7 +2447,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>לחיצה כפולה ממרכזת את השורה הנוכחית</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_hu.ts featherpad-1.0.1/featherpad/data/translations/featherpad_hu.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_hu.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_hu.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licenc</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Névtelen</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Beállítások</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kódolás</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>Menté&s</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Csere</translation>
     </message>
@@ -799,461 +799,473 @@
         <translation>Összes cseréje</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Nem&rég megnyitott</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Bezárás</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Menti a változtatásokat?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Látogasson el arra az ablakra, vagy csak zárja be a párbeszédablakát!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>A dokumentum módosult.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Elvetés</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Mégse</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nem az összeset</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Nincs mentve</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Sorok</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Kijelölt karakterek</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Szavak</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Egy másik folyamat már fut ezen a lapon!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Parancsfájl</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Egy másik FeatherPad ablaknak már van egy párbeszédablaka!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Helyzet:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normál</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>A fájl nem létezik.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Link megnyitása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Link másolása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Laponként csak egy folyamat megengedett.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Szkriptkimenet</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Tisztítás</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>A FeatherPad nem tud 100 MiB-nál nagyobb fájlokat megnyitni.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>A nem szöveges fájlok nem lettek megnyitva!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Lásd: Beállítások → Fájlok → Nem szöveges fájlok megnyitásának letiltása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Néhány fájlt nem lehet megnyitni!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Lehet, hogy nincs engedélye az olvasásra.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Nem szerkeszthető fájl(ok)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>A nem szöveges fájlok vagy a hatalmas sorokkal rendelkező fájlok nem szerkeszthetők.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Korábbi összeomlás észlelve!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Lehetőleg zárja be az összes FeatherPad ablakot, és indítsa újra!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Root példány</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Minden fájl (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Minden fájl (*);;.%1 Fájlok (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Fájl megnyitása...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>%1 Fájlok (*.%1);;Minden fájl (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Mentés másként...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Kódolás megtartása és mentés másként...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Mentés rootként.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Várakozás hitelesítésre...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>A "pkexec" nem található. Telepítse a Polkit programot!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Igen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nem</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Mégse</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Biztos <b>MS Windows</b> sorvégeket akar használni?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Ez jó lehet, ha MS Windowson is meg szeretné nyitni.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Nem menthető!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Súgó</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Szintaxis</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>A nagy fájl(ok) nem lett(ek) megnyitva!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>A behúzások átalakítva szóközökké.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>A kijelölt szöveg túl hosszú volt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Nincs teljesen feldolgozva.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Ezt a fájlt máshol vagy máshogyan módosították!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Legyen óvatos a dokumentum újratöltésével vagy mentésével kapcsolatban!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Nyomtatás folyamatban...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Dokumentum nyomtatása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>A nyomtatás kész.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 lap</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Cél útvonalának másolása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Cél megnyitása itt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Tartalmazó mappa megnyitása</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Fel kell vennie egy Hunspell szótárt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Lásd: Beállítások → Szöveg → Helyesírás-ellenőrzés!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>A Hunspell szótár nem létezik.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>A Hunspell szótárhoz nem kapcsolódik affix fájl.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Nincs helyesírási hiba a dokumentumban.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Nincs helyesírási hiba a kijelölt szövegben.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Helyesírás-ellenőrzés</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Néhány fájlt nem lehet menteni!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Fordítók</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Egy könnyed, lapokkal ellátott, egyszerű szövegszerkesztő</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>amely a Qt-n alapul</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Szerző</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>más néven</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>FeatherPad névjegye</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Nincs csere</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Egy csere</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln csere</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Az első 1000 csere van kiemelve.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>A szintaxiskiemelés méretkorlátja túllépve.</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1434,64 +1446,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>K&eresősáv elrejtése alapértelmezetten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Alapértelmezetten minden keresésnek
 külön keresési előzményei vannak.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Megosztott keresési előzmények használata</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Áll&apotsor megjelenítése mindig</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Egérpozíció megjelenítése az állapotsoron</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>A párbeszédpanel bezárása után lép érvénybe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Lapok helyzete: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Fent</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Lent</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Balra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Jobbra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1502,17 +1525,17 @@
 A lapok egérkerékkel történő váltását ez nem érinti.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Lapok körbejárás&a</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Ablak bezárása az utolsó lap bezárásakor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1525,12 +1548,12 @@
 jelenti, hogy több asztaluk van.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Mindig külön ablakban nyissa meg</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1541,32 +1564,32 @@
 Néhány asztali környezet, például a KDE és az LXQt, biztosít fájl-párbeszédpanelt.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Alapértelmezett fájl-párbeszédpanel</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Ne jelölje be, ha a Monospace-t szeretné.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Be&tűtípus megjegyzése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Ez bezárja a zárójeleket, és az idézőjeleket.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>A&utomatikus zárójelkiegészítés</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1575,114 +1598,114 @@
 a megfelelő körülmények között.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Három pont és a dupla kötőjel lecserélése gépelés közben</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>A kijelölt szöveg nagybetűérzékeny és teljes
 egyezéseinek kiemelése.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Kijelölés kiemelése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Ne legyen kiemelés azoknál a fájloknál, amelyek nagyobbak mint </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Ez létrehoz egy menügombot az
 állapotsoron a szintaxis megváltoztatásához.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Szintaxisfelülbírálás támogatása</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Szóközök, behúzások, behúzásvonalak megjelenítése
 amikor a szintaxiskiemelés be van kapcsolva.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Szóközök, behúzások megjelenítése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>A függőleges vonalakat csak akkor lehet megjeleníteni, ha
 a betűtípus rögzített szélességű (pl. Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Függőleges vonalak megjelenítése innentől:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Sorvégek és dokumentumvég megjelenítése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Dátum és idő formátuma:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Néhány szövegszerkesztő nem tud megnyitni olyan dokumentumot
 amelynek az utolsó sora nem üres.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Az utolsó sor üres legyen mentéskor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Sorvégi szóközök eltávolítása mentéskor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Tehetetlenségi görgetés egérkerékkel</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Fájlok</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Fájlkezelés</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Indulás az utolsó ablak fájljaival</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1705,32 +1728,32 @@
 felugró ablakban lesznek megjelenítve.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Indítás ezzel a paranccsal: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Parancs és kapcsolók</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Nemré&g módosított fájlok megjelenítése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Ne&mrég megnyitott fájlok megjelenítése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Módosítások mentése minden:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Segítség</translation>
     </message>
@@ -1740,7 +1763,7 @@
         <translation>Indulás oldalsávval</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1749,57 +1772,57 @@
 és nem lehet a lapot áttenni másik ablakba.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>Eg&y lapnál lapsáv elrejtése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Szöveg</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Szövegszerkesztő</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Sortörés alapértelmezetten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Automat&ikus behúzás alapértelmezetten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Sorszámok megjele&nítése mindig</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Szinta&xiskiemelés alapértelmezetten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Sö&tét téma</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Háttérszín értéke: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1819,13 +1842,13 @@
 megnyomásával lehet megszakítani.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Az érvényesítéshez újra meg kell nyitni az ablakot.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1844,13 +1867,13 @@
 Az érvényesítéshez újra meg kell nyitni az ablakot.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Futtatható szkriptek futtatása</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1863,8 +1886,8 @@
 Az érvényesítéshez újra kell indítani az alkalmazást.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1879,35 +1902,35 @@
 MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Behúzásméret:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> szóköz</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Vastag szövegkurzor</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Az egérgörgetés fokozatosan lassuljon,
 ha a szöveg felett görget?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Helyesírás-ellenőrzés</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1916,51 +1939,51 @@
 csak ".aff"-ra végződik.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>A Hunspell szótár útvonala:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Szótár hozzáadása...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Ha ez nincs bejelölve, a helyesírás-ellenőrzés
 a dokumentum kezdetétől indul.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Helyesírás-ellenőrzés a szövegkurzortól</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>A legutóbbi fájlok száma: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Csak, ha a számuk nem több 50-nél.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Csak létező és menthető fájlok esetén.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> percben</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1973,97 +1996,97 @@
 Ez néhány körülmény között hasznos lehet: pl. az időbélyeg megváltoztatásához, vagy a záró szóközök levágásához.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Nem módosított fájlok mentésének engedélyezése</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Ehelyett jelenjen meg egy figyelmeztetés.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Nem szöveges fájlok megnyitásának letiltása</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Alapértelmezés szerint a fájlok másoláskor
 megnyílnak, ha be vannak illesztve a FeatherPadbe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Útvonalak beillesztése fájlok helyett</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Gyorsbillentyűk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Művelet</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Kombináció</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Alapértelmezett kombinációk visszaállítása.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Alapértelmezett</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Kiemelőszínek</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elem</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Szövegszín</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Nem látható karakterek színértéke:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Csak akkor van hatása, ha a sorszámok meg vannak jelenítve.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Aktuális sor kiemelésének értéke:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Alapértelmezett kiemelőszínek visszaállítása.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Bezárás</translation>
     </message>
@@ -2080,111 +2103,111 @@
         <translation>Dupla kattintás a színre a módosításhoz.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>fájl</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>fájl</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Figyelmeztetés: Nem egyértelmű gyorsbillentyű található!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Függvények, hivatkozások…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Beépített függvények</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Megjegyzések</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Idézőjelek</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Típusok</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Kulcsszavak</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Számok</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Reguláris kifejezések, kódblokkok…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Dokumentumblokkok, XML/HTML elemek…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown címsorok, CSS értékek…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Extra elemek</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Az érvényesítéshez újra kell indítania az alkalmazást.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Az érvényesítéshez újra meg kell nyitni az ablakot.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Nem&rég megnyitott</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Nem&rég módosított</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>A beírt gyorsbillentyű foglalt.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell szótárfájlok (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Kiemelőszín kiválasztása</translation>
     </message>
@@ -2192,38 +2215,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Keresés...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Nagybetűérzékeny</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Teljes szó</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Reguláris kifejezés</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Keresés reguláris kifejezéssel...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Következő</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Előző</translation>
     </message>
@@ -2376,7 +2399,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Szűrő...</translation>
     </message>
@@ -2422,7 +2445,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Dupla kattintás, hogy a legutóbbi sor középre kerüljön</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_id.ts featherpad-1.0.1/featherpad/data/translations/featherpad_id.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_id.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_id.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Lisensi</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Tanpa Judul</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation></translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation></translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation></translation>
     </message>
@@ -798,461 +798,473 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Buka Tautan</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Salin Tautan</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Anda perlu menambahkan kamus Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished">Lihat Pengaturan → Teks → Pengecekan Ejaan!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Kamus Hunspell tidak ditemukan.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished">Kamus Hunspell tidak disertai dengan file affix.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Tidak ada kesalahan ejaan dalam dokumen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Tidak ada kesalahan ejaan dalam kursor teks.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Pemeriksaan Ejaan</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Beberapa file tidak dapat disimpan!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform></numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation></translation>
     </message>
@@ -1260,13 +1272,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1430,64 +1442,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Secara default, setiap entri pencarian
 memiliki riwayat pencarian yang terpisah.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Gunakan riwayat pencarian bersama</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1495,17 +1518,17 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1514,12 +1537,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1527,32 +1550,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1561,109 +1584,109 @@
 dalam kondisi yang tepat.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Tukar tiga titik dan dua tanda hubung selagi mengetik</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1677,32 +1700,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation></translation>
     </message>
@@ -1712,7 +1735,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1720,57 +1743,57 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1782,13 +1805,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1800,13 +1823,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1815,8 +1838,8 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1826,34 +1849,34 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished">Pengecekan Ejaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1862,51 +1885,51 @@
 nama yang sama tapi dengan ekstensi “.aff”.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Folder kamus Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Tambah kamus...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Jika ini tidak dicentang, pengecekan ejaan
 akan dimulai dari dokumen paling awal.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Mulai pengecekan ejaan dari kursor teks</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1916,96 +1939,96 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation></translation>
     </message>
@@ -2021,111 +2044,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Files kamus Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2133,38 +2156,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regular Expression</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Cari dengan regex...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation></translation>
     </message>
@@ -2316,7 +2339,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation></translation>
     </message>
@@ -2362,7 +2385,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_it.ts featherpad-1.0.1/featherpad/data/translations/featherpad_it.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_it.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_it.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licenza</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Senza nome</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Opzioni</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Codifica</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Salva</translation>
     </message>
@@ -486,7 +486,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Prime Lettere Maiuscole</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Sostituzione</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Sostituire tutte</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>File &recenti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Chiudi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Salvare le modifiche?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Per favore porre attenzione a questa finestra o  chiudere il  dialogo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Il documento è stato modificato.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Scarta le &modifiche</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Annulla</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&No a tutti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Non salvato</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Righe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Caratteri selezionati</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Parole</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Un altro processo è in esecuzione in questa scheda!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Un altra finestra di FeatherPad ha una finestra di dialogo modale!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Posizione:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normale</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Il file non esiste.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Apri il collegamento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Copia il collegamento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>È consentito un solo processo per scheda.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Risultato dello script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Pulisci</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad non apre file più grandi di 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Non aperto un file non di testo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Vedi Preferenze → File → Non permettere l'apertura di file non di testo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Alcuni file non possono essere aperti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Potrebbero mancare i permessi di lettura.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>File non modificabili!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Non è possibile modificare file non di testo o file enormi.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Rilevato un crash precedente!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Preferibilmente, chiudi tutte le finestre di FeatherPad e ricomincia!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instanza Root</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Tutti i file (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Tutti i file (*) ;;.% 1 file (*.% 1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Apri file...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.% 1 File (*.% 1) ;; Tutti i file (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Salva con nome...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Mantieni codifica e salva come ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Salvando come amministratore.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>In attesa di autenticazione...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>Non è stato trovato "pkexec". Per favore installare Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Sì</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Cancella</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Vuoi utilizzare fine riga <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Questo può essere buono per la leggibilità sotto MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Impossibile salvare!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Aiuto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintassi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>File enormi non aperti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>I tab sono stati sostituiti da spazi.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Il testo selezionato era troppo lungo.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Non è processato completamente.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Questo file è stato modificato altrove o in altro modo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Si prega di fare attenzione a ricaricare o salvare questo documento!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Stampa in corso...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Stampa Documento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Stampa completata.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 pagine</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Copia percorso di destinazione</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Apri percorso di destinazione</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Neccessità di un dizionario Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Vedi → Preferenze → Testo → Controllo ortografico!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Il dizionario Hunspell non esiste.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Il dizionario Hunspell non è affiancato da un file affix.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Nessun sbaglio ortografico nel documento.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Nessun sbaglio ortografico dalla posizione del cursore.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Controllo ortografico</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Alcuni file non si possono salvare!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Traduttori</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Un editor di testo leggero a schede</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>basato su Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Informazioni su FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Nessuna sostituzione</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Una sostituzione</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln Sostituzione</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Le prime 1000 sostituzioni sono evidenziate.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Il limite di dimensione per l'evidenziazione della sintassi è stato  superato.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1435,63 +1447,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Nascondi &barra di ricerca per impostazione predefinita</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Predefinito ogni ricerca ha
+una propria cronologia di ricerca.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
-        <translation type="unfinished"></translation>
+        <translation>Usa cronologia condivisa per la ricerca</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Mostra sempre la barra di st&ato</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Mostra la posizione del cursore sulla barra di stato</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Avrà effetto dopo la chiusura di questa finestra di dialogo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1502,17 +1526,17 @@
 La navigazione a schede con la rotellina del mouse non è influenzata.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Navigazione a schede &circolare</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Chiudi la finestra alla chiusura dell&#39;ultima scheda</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1550,12 @@
 di avere più desktop.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Apri sempre in finestre separate</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1543,32 +1567,32 @@
 Alcuni ambienti desktop, come KDE e LXQt, forniscono finestre di dialogo dei file.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Finestra di dialogo nativo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Deseleziona per Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Ricorda &carattere</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Questo copre parentesi, parentesi graffe e virgolette.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Completamento di parentesi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1578,113 +1602,113 @@
 (–).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Sostituisci tre punti e doppi trattini durante la scrittura</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Evidenzia selezione</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Non evidenziare mai la sintassi per i file > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Ciò crea un pulsante di menu sulla
 barra di stato per la modifica della sintassi.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Permetti scelta dell'evidenziazione della sintassi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Mostra spazi, tabulazioni e righe di tabulazioni
 quando la sintassi è evidenziata.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Mostra gli spazi bianchi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Le linee di posizione verticali verranno disegnate solo
 se il font dell&#39;editor è di larghezza fissa (come Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Mostra le linee verticali a partire da questa posizione:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Mostra anche la fine della riga e del documento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Formato data e ora:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Alcuni editor di testo non possono aprire
 un documento la cui ultima riga non è vuota.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Imponi un ultima riga vuota al salvataggio</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Rimuovi gli spazi fine di riga al momento del salvataggio</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Scorrimento lento con rotellina del mouse</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Gestione file</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Avvia con i file dell'ultima finestra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1707,32 +1731,32 @@
 verranno visualizzati da una finestra di dialogo a comparsa.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Avvia con questo commando: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Comando + Argomenti</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Mostra file &recenti e modificati</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Mostra file &recenti</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Salva le modifiche ai file aperti ogni:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Aiuto</translation>
     </message>
@@ -1742,7 +1766,7 @@
         <translation>Avvia in modalità pannello laterale</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1753,57 +1777,57 @@
 per mezzo di trascinamento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Non mostrare una singola scheda</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Testo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Editor di testo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Mandi a capo le righe per impostazione predefinita</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Auto- &rientro per impostazione predefinita</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Mostra sempre la &numerazione delle righe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Evidenzia sintassi per impostazione predefinita</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Schema di colore &scuro</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Valore del colore di sfondo: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1822,13 +1846,13 @@
 Di seguito il processo può essere fermato con Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Ha bisogno di riapertura della finestra per avere effetto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1846,13 +1870,13 @@
 Richiede riapertura della finestra per avere effetto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Esegui script eseguibili</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1865,8 +1889,8 @@
 Riavviare FeatherPad per avere effetto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1881,22 +1905,22 @@
 MMM gg, aaaa, hh: mm: ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Dimensione testo della scheda:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> spazi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Cursore del testo spesso</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Deve essere lento lo scorrimento della rotellina
@@ -1904,13 +1928,13 @@
 della visualizzazione del testo?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Controllo ortografico</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1919,51 +1943,51 @@
 nome ma che termina con ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Percorso al dizionario Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Aggiungi dizionario...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Se non spuntato, il controllo ortografico
 parte dall'inizio del documento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Inizia controllo ortografico dalla posizione del cursore</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Numero di file recenti: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Solo se il loro numero non è superiore a 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Solo per i file esistenti e che possono essere salvati.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1977,96 +2001,96 @@
 modificare la data o rimuovere spazi  vuoti.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Consenti il salvataggio di file non modificati</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Mostra invece un avvertimento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Non consentire l'apertura di file non di testo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Incolla percorsi invece di file</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Scorciatoie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Azione</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Scorciatoia</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Ripristina scorciatoie predefinite.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Predefinito</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Colori sintassi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elemento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Colore testo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Valore del colore spazio bianco:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Ha effetto solo se attiva la visualizzazione numero righe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Valore attuale di evidenziamento riga:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Reimposta colori sintassi predefiniti.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Chiudi</translation>
     </message>
@@ -2083,111 +2107,111 @@
         <translation>Doppio clic su un colore per modificarlo.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>File</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Attenzione: rilevata una scorciatoia ambigua!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funzioni, URL,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Funzioni integrate</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Commenti</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citazioni</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipi</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Parole chiavi</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Numeri</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Espressioni regolari, Blocchi di codice,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Document Blocks, XML/Elementi HTML,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Testate Markdown, Valori CSS,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Elementi extra</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>E' necessario il riavvio dell'applicazione per attivare le modifiche.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>La riapertura della finestra è necessaria perché le modifiche abbiano effetto.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Modificati &recentemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Modificati &recentemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>La scorciatoia inserita è già in uso.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>File dizionario Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Selezione colore sintassi</translation>
     </message>
@@ -2195,38 +2219,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Cerca…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Distingui Maiuscole/minuscole</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Parola intera</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Espressione regolare (regex)</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Cerca con regex…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Prossimo</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Precedente</translation>
     </message>
@@ -2380,7 +2404,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtra...</translation>
     </message>
@@ -2426,7 +2450,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Fare doppio clic per centrare la linea corrente</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_ja.ts featherpad-1.0.1/featherpad/data/translations/featherpad_ja.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_ja.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_ja.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>ライセンス</translation>
     </message>
@@ -92,9 +92,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>置換</translation>
     </message>
@@ -150,7 +150,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>保存(&S)</translation>
     </message>
@@ -776,484 +776,496 @@
         <translation>すべて置換</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>ヘルプ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>無題</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>最近開いたファイル(&R)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>桁位置:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>ノーマル</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>別の FeatherPad ウィンドウにモーダルダイアログがあります!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>そのウィンドウに移動したり、ダイアログを閉じてください!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>変更内容を保存しますか?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>ファイルは存在しません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>文書が変更されています。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>変更の破棄(&D)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>キャンセル(&C)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>すべて無視(&N)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>未保存</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>エンコーディング</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>全行数</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>選択文字数</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>単語数</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>リンクを開く</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>リンクをコピー</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>このタブで別のプロセスが実行中です!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>タブごとに許可されるプロセスは1つだけです。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>スクリプトの出力</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>スクリプトファイル</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>閉じる</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>消去</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>大きすぎるファイルは開けません!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad は 100 MiB 以上のファイルを開けません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>テキスト以外のファイルは開けません!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>次の設定を確認してください: 設定 → ファイル → テキスト以外のファイルを開くことを許可しない</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>一部のファイルを開くことができませんでした!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>おそらく読み取り権限がありません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>編集できないファイルです!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>テキスト形式ではないファイルや大きすぎるファイルは編集できません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>以前のクラッシュを検出しました!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>可能でしたら、FeatherPad のウィンドウをすべて閉じて起動し直してください!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Root 権限のインスタンス</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>すべてのファイル(*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>すべてのファイル(*);;.%1 ファイル (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>ファイルを開く...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 ファイル (*.%1);;すべてのファイル (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>名前を付けて保存...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>エンコードして保存...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>root として保存します。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>認証を待っています...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" が見つかりません。Polkit をインストールして下さい!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>はい</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>いいえ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>キャンセル</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation><b>MS Windows</b> の改行コード (CR LF) を使いますか?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>これにより、MS Windows で文章が読みやすくなります。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>構文</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>保存できません!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>テキストのタブはスペースに変換されます。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>選択したテキストが長すぎます。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>完全には処理されていません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>このファイルは他の場所で更新されています!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>この文書の再読み込みや保存には注意してください!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>印刷中です...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>文書の印刷</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>印刷が完了しました。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 ページ</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>対象のパスをコピー</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>対象をここで開く</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>最終的な対象のパスをコピー</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>最終的な対象をここで開く</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>このファイルのあるフォルダを開く</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Hunspell 辞書を追加してください。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>設定 → テキスト → スペルチェック を参照してください!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell 辞書が存在しません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell 辞書に付属ファイルがありません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>文書にスペルミスはありません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>テキストのカーソル位置から、スペルミスはありません。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>スペルチェック</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>いくつかのファイルは保存できませんでした!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>軽量なタブ機能付きのプレーンテキストエディター</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>Qt ベース</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>作者</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>FeatherPad について</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>翻訳</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>置換なし</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>1 個置換</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln 個置換</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>最初の1000個の置換がハイライトされます。</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>構文のハイライト表示のサイズ制限を超えています。</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1439,64 +1451,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>メニューバーのアクセラレーターを無効にする</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>デフォルトで検索バーを表示しない(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>デフォルトでは、各検索エントリーには
 個別の検索履歴があります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>検索履歴を共有する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>常にステータスバーを表示する(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>ステータスバーにカーソル位置を表示する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>このダイアログを閉じた後に有効になります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>タブの位置: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>上</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>下</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>左</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>右</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1507,12 +1530,12 @@
 マウスホイールを使用したタブナビゲーションには影響しません。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>タブのナビゲーションを折り返す(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1523,17 +1546,17 @@
 ドドロップしてマージすることができなくなります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>タブが単一の時は表示しない(&D)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>最後のタブを閉じる時にウィンドウも閉じる</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1546,12 +1569,12 @@
 プがあることを確認できない場合があります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>常に別のウィンドウで開く</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1562,52 +1585,52 @@
 KDE や LXQt のようなデスクトップ環境は、独自のファイルダイアログを提供します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>本来のファイルダイアログ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>テキスト</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>テキストエディター</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>チェックしない時は Monospace になります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>フォントを記憶する(&F)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>デフォルトで行を折り返す(&W)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>デフォルトで自動的にインデントする(&I)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>これは、カッコ、中括弧、角括弧、および引用符を扱います。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>自動でカッコを閉じる(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1616,33 +1639,33 @@
 2連続ハイフン (--) を長いダッシュ (—) に置き換えます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>入力中に3連続ピリオドと2連続ハイフンを置換する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>常に行番号を表示する(&N)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>選択したテキストの大文字小文字を区別して完全一致をハイライトします。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>選択ハイライト表示する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>デフォルトで構文をハイライト表示する(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>これにより、
@@ -1650,63 +1673,63 @@
 メニューボタンが作成されます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>構文の上書きをサポートする</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>構文をハイライト表示しないファイルの上限 </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>構文がハイライト表示されている時、
 スペース、タブ、インデントを表示します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>空白マークを表示する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>行末と文書の末尾を示すマークを表示する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>垂直位置線は、エディターのフォントが等幅フォント
 (Monospace など) の場合にのみ表示されます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>この位置から垂直線を表示:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
-        <translation>有効にするにはウィンドウを開き直す必要があります。</translation>
+        <translation>有効にするにはウィンドウを開き直して下さい。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>暗い色のスキームを使う(&O)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1721,16 +1744,16 @@
 明るい背景は、230~255の範囲で、230が目にやさしいと思います。
 暗い背景は、0〜50の範囲で、50が目にやさしいと思います。
 
-反映させるには、ウィンドウを開き直す必要があります。</translation>
+反映させるには、ウィンドウを開き直して下さい。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>背景色の値: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1747,62 +1770,62 @@
 yyyy-MM-dd hh:mm</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>日付と時刻の形式:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>タブ文字のサイズ:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> 個のスペース</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>一部のテキストエディターは最後の行が
 空でない文書を開けません。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>保存時に最後の行が空かどうかを確認する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>保存時に末尾のスペースを削除する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>テキストカーソルを太くする</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>カーソルがテキストビュー内にある場合に、
 マウスホイールで慣性スクロールを使いますか?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>マウスホイールでの慣性スクロールを使う</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>スペルチェック</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1811,41 +1834,41 @@
 一緒にする必要があります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell 辞書のパス:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>辞書を追加...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>これがチェックされていない場合、
 文書の先頭からスペルチェックを行います。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>テキストカーソル位置からスペルチェックを開始する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>ファイル</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>ファイル管理</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1855,35 +1878,35 @@
 または最近開いたファイルの最大数です。
 既定値は 10 です。
 
-有効にするには、アプリケーションの再起動が必要です。</translation>
+有効にするには、アプリケーションを再起動して下さい。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>記憶しておく最近のファイルの数: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>最近更新したファイルを表示する(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>最近開いたファイルを表示する(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>その数が50を超えない場合のみ。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>最後のウィンドウのファイルを開いて起動する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1901,13 +1924,13 @@
 Ctrl+Alt+E でプロセスを終了できます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>実行可能なスクリプトを実行する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1927,33 +1950,33 @@
 出力やエラーメッセージはポップアップダイアログで表示します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>次のコマンドで開始: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>コマンド + 引数</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>実在し保存可能なファイルのみ。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>開いているファイルの変更を指定間隔で保存:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> 分</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1969,102 +1992,102 @@
 い場合といった、特定の条件下で役立ちます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>未更新ファイルの保存を許可する</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>代わりに警告を表示します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>テキスト以外のファイルを開くことを許可しない</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>デフォルトでは、ファイルをコピーして、
 FeatherPad に貼り付ける場合はそのファイルを開きます。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>ファイルではなくパスを貼り付ける</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>ショートカット</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>動作</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>ショートカット</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>ショートカットを初期設定に戻します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>既定値</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>構文の色</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>要素</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>文字の色</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>ホワイトスペースの色の値:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>行番号が表示されている場合のみ効果があります。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>現在行の強調表示の値:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>構文の色を初期設定に戻します。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>ヘルプ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>閉じる</translation>
     </message>
@@ -2081,111 +2104,111 @@
         <translation>変更する色をダブルクリックしてください。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>ファイル</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>ファイル</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>警告: 不正なショートカットを検出しました!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>関数, URL, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>組み込み関数</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>コメント</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>引用</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>タイプ</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>キーワード</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>数値</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>正規表現, コードブロック,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>文書ブロック, XML/HTML 要素,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>マークダウンの見出し, CSS の値,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>その他の要素</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
-        <translation>変更を有効にするには、アプリケーションの再起動が必要です。</translation>
+        <translation>変更を有効にするには、アプリケーションを再起動して下さい。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
-        <translation>変更を有効にするには、ウィンドウを開き直す必要があります。</translation>
+        <translation>変更を有効にするには、ウィンドウを開き直して下さい。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>最近開いたファイル(&R)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>最近更新したファイル(&M)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>入力したショートカットは予約済みでした。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell 辞書ファイル (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>構文の色を選択</translation>
     </message>
@@ -2193,38 +2216,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>検索...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>次へ</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>前へ</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>大文字・小文字の区別</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>単語全体</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>正規表現</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>正規表現で検索...</translation>
     </message>
@@ -2377,7 +2400,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>絞り込み...</translation>
     </message>
@@ -2423,7 +2446,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>ダブルクリックすると現在の行を中央に表示します</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_ko.ts featherpad-1.0.1/featherpad/data/translations/featherpad_ko.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_ko.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_ko.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,26 +4,26 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
-        <translation>라이센스</translation>
+        <translation>라이선스</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>제목 없음</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>옵션(&O)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>인코딩</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>저장(&S)</translation>
     </message>
@@ -443,7 +443,7 @@
     <message>
         <location filename="../../fp.ui" line="1119"/>
         <source>Side-Pane</source>
-        <translation type="unfinished"></translation>
+        <translation>측면 창</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1122"/>
@@ -464,7 +464,7 @@
         <location filename="../../fp.ui" line="1135"/>
         <location filename="../../fp.ui" line="1138"/>
         <source>To Upper Case</source>
-        <translation>대문자로 바꾸기</translation>
+        <translation>대문자로</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1141"/>
@@ -475,7 +475,7 @@
         <location filename="../../fp.ui" line="1146"/>
         <location filename="../../fp.ui" line="1149"/>
         <source>To Lower Case</source>
-        <translation>소문자로 바꾸기</translation>
+        <translation>소문자로</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1152"/>
@@ -536,7 +536,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>공백에 텍스트 탭</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>바꾸기</translation>
     </message>
@@ -799,476 +799,488 @@
         <translation>모두 바꾸기</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>최근 열어본 파일(&R)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>닫기</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>변경된 내용을 저장하시겠습니까?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>해당 창을 확인하거나 대화 상자를 닫으십시오!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>이 문서는 변경됩니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>변경 사항을 취소(&D)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>취소(&C)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
-        <translation type="unfinished"></translation>
+        <translation>모두 아니요(&N)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>저장 안 됨</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>줄</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>선택된 문자수</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>단어</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>다른 프로세스가 이 탭에 실행 중입니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>스크립트 파일</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>다른 FeatherPad 윈도우에 대화 상자가 열려있습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>위치:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>일반</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>파일이 존재하지 않습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>링크 열</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>링크 복사</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>한 탭에 하나의 프로세스만 허용됩니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>스크립트 출력</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>지우기</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad는 100 MiB 이상의 파일을 열 수 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>텍스트가 아닌 파일은 열 수 없습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>속성 → 파일 → 텍스트가 아닌 파일을 열지 않기 항목을 확인하세요</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>일부 파일이 열리지 않았습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>파일을 읽을 수 있는 권한이 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>수정할 수 없는 파일입니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>텍스트 파일이 아니거나 긴 줄을 포함하는 파일은 편집할 수 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>이전의 충돌이 감지되었습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>모든 FeatherPad 윈도우를 닫고 다시 시작할 것을 권장합니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
-        <translation type="unfinished"></translation>
+        <translation>루트 인스턴스</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>모든 파일 (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>모든 파일 (*);.%1 파일 (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>파일 열기...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 파일 (*.%1);;모든 파일 (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>다른 이름으로 저장...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>인코딩을 유지하고 다른 이름으로 저장...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation>루트로 저장중입니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>인증을 기다리는 중...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec"을 찾을 수 없습니다. Polkit를 설치하십시오!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>예</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>아니오</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>취소</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation><b>MS Windows</b>의 EOL(end-of-lines)를 사용하시겠습니까?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>MS Windows에서의 가독성이 더 높아질 것입니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>저장되지 않음!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>도움말</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>문법</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>양이 많은 파일은 열 수 없습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>텍스트 탭 공간으로 변환됩니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
-        <translation type="unfinished"></translation>
+        <translation>선택한 텍스트가 너무 깁니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>완전히 처리되지 않았습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>이 파일은 다른 곳이나 다른 방법으로 수정되었습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>이 문서를 다시 불러오거나 저장합니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>진행 중인 인쇄...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>인쇄 문서</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>인쇄가 완료되었습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 페이지</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>복사 대상 경로</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>이 경로에 열기</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>최종 대상 경로 복사</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>여기에서 최종 대상 열기</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>포함하는 폴더 열기</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전을 추가해야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>속성 → 텍스트 → 맞춤법 검사를 확인하세요!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전이 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전은 접미사 파일파일이 동반되지 않습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>이 문서에 잘못된 표현이 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>이 커서의 위치에 잘못된 표현이 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>맞춤법 검사</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>일부 파일이 저장되지 않았습니다!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>번역</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>가볍고, 탭이 있는 텍스트 에디터</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
-        <translation type="unfinished">Qt 기반</translation>
+        <translation>Qt에 기반함</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>저자</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
-        <translation type="unfinished"></translation>
+        <translation>일명.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>FeatherPad 정보</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
-        <translation type="unfinished">바꾸지 않기</translation>
+        <translation>교체 없음</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
-        <translation type="unfinished">이번 한 번만 바꾸기</translation>
+        <translation>한번 교체</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
-        <translation type="unfinished">
-            <numerusform>%Ln회 바꾸기</numerusform>
+        <translation>
+            <numerusform>%Ln회 교체</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>처음 1000개의 교체가 강조표시됩니다.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
-        <translation type="unfinished"></translation>
+        <translation>구문 강조 표시의 크기 제한을 초과했습니다.</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>숨겨진 파일 표시 전환</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>숨겨진 파일 표시 전환</translatorcomment>
@@ -1362,7 +1374,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="75"/>
         <source>Remember window &size on closing</source>
-        <translation type="unfinished"></translation>
+        <translation>닫을 때 창 크기 기억(&S)</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="84"/>
@@ -1370,50 +1382,52 @@
         <location filename="../../prefDialog.ui" line="107"/>
         <location filename="../../prefDialog.ui" line="120"/>
         <source>Window frame is excluded.</source>
-        <translation type="unfinished"></translation>
+        <translation>창 프레임은 제외됩니다.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="87"/>
         <source>Start with this size: </source>
-        <translation type="unfinished"></translation>
+        <translation>이 크기로 시작: </translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="100"/>
         <location filename="../../prefDialog.ui" line="123"/>
         <source> px</source>
-        <translation type="unfinished"></translation>
+        <translation> 픽셀</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="110"/>
         <source>×</source>
-        <translation type="unfinished"></translation>
+        <translation>×</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="148"/>
         <source>Enforcing a window position is not recommended
 and may not work with some window managers.</source>
-        <translation type="unfinished"></translation>
+        <translation>창 위치를 적용하는 것은 권장되지 않으며 
+일부 창 관리자에서는 작동하지 않을 수 있습니다.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="152"/>
         <source>Remember window &position on closing</source>
-        <translation type="unfinished"></translation>
+        <translation>닫을 때 창 위치 기억(&P)</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="159"/>
         <source>Most suitable with sessions
 but without tab functionality.</source>
-        <translation type="unfinished"></translation>
+        <translation>세션에 가장 적합하지만
+탭 기능은 없습니다.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="188"/>
         <source>Uncheck for 1/5 of the width.</source>
-        <translation type="unfinished"></translation>
+        <translation>너비의 1/5을 선택 취소합니다.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="191"/>
         <source>Remember splitter position</source>
-        <translation type="unfinished"></translation>
+        <translation>스플리터 위치 기억</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="200"/>
@@ -1424,7 +1438,8 @@
         <location filename="../../prefDialog.ui" line="207"/>
         <source>If the menubar is hidden,
 a menu button appears on the toolbar.</source>
-        <translation type="unfinished"></translation>
+        <translation>메뉴 표시줄이 숨겨져 있으면,
+도구 모음에 메뉴 버튼이 나타납니다.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="211"/>
@@ -1433,237 +1448,269 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>메뉴 모음 가속기는 Alt에 의해 활성화되며
+사용자 정의 단축키를 방해할 수 있습니다.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>메뉴 모음 가속기 비활성화</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 검색창 숨김(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 각 검색 항목에는
+별도의 검색 기록이 있습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
-        <translation type="unfinished"></translation>
+        <translation>공유 검색 기록 사용</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
-        <translation type="unfinished"></translation>
+        <translation>항상 상태 표시줄 표시(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
-        <translation type="unfinished"></translation>
+        <translation>상태 표시줄에 커서 위치 표시</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 대화 상자를 닫은 후에 적용됩니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
-        <translation type="unfinished"></translation>
+        <translation>탭 위치: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>북</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>남</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>서</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>동</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
 Tab navigation with mouse wheel is not affected.</source>
-        <translation type="unfinished"></translation>
+        <translation>즉, LTR의 경우 Alt+Right는 마지막 탭이 활성화된 후
+첫 번째 탭으로 이동하고, Alt+Left의 경우에도
+동일합니다.
+
+마우스 휠을 사용한 탭 탐색은 영향을 받지 않습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
-        <translation type="unfinished"></translation>
+        <translation>탭 탐색 둘러보기(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
-        <translation type="unfinished"></translation>
+        <translation>마지막 탭을 닫을 때 창 닫기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
 However, some desktop environments may not
 report that they have multiple desktops.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 현재 바탕화면에 FeatherPad 창이 
+있으면 해당 탭에서 파일이 열립니다.
+
+그러나 일부 데스크탑 환경은 여러 바탕화면이 
+있다고 보고하지 않을 수 있습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
-        <translation type="unfinished"></translation>
+        <translation>항상 별도의 창에서 열기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
 Some desktop environments, like KDE and LXQt, provide files dialogs.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 옵션을 선택하면, 현재 데스크탑 환경에서 제공하는 
+파일 대화 상자가 Qt 파일 대화 상자 대신 사용됩니다.
+
+KDE 및 LXQt와 같은 일부 데스크톱 환경에서는 
+파일 대화상자를 제공합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
-        <translation type="unfinished"></translation>
+        <translation>기본 파일 대화상자</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
-        <translation type="unfinished"></translation>
+        <translation>고정 너비의 선택을 취소합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
-        <translation type="unfinished"></translation>
+        <translation>글꼴 기억(&F)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
-        <translation type="unfinished"></translation>
+        <translation>여기에는 괄호, 중괄호, 대괄호 및 따옴표가 포함됩니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
-        <translation type="unfinished"></translation>
+        <translation>자동 대괄호(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 적절한 상황에서 입력하는 동안
+세 개의 마침표는 줄임표로, 이중 하이픈은
+긴 대시로 바뀝니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
-        <translation type="unfinished"></translation>
+        <translation>입력하는 동안 세 개의 마침표와 이중 하이픈 바꾸기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>선택한 텍스트의 대소문자 구분 및 전체 일치를
+강조 표시합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>선택 강조 표시</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
-        <translation type="unfinished"></translation>
+        <translation>파일 구문을 강조 표시하지 않음 > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
-        <translation type="unfinished"></translation>
+        <translation>이렇게 하면 구문을 변경하기 위한
+상태 표시줄에 메뉴 버튼이 만들어집니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
-        <translation type="unfinished"></translation>
+        <translation>구문 재정의 지원</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>구문이 강조 표시되면 공백,
+탭 및 탭 줄을 표시합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
-        <translation type="unfinished"></translation>
+        <translation>공백 표시</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
-        <translation type="unfinished"></translation>
+        <translation>편집기 글꼴에 고정된 피치가 있는 경우에만
+(예: 고정 너비)수직 위치선이 그려집니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
-        <translation type="unfinished"></translation>
+        <translation>이 위치에서 시작하는 수직선 표시:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
-        <translation type="unfinished"></translation>
+        <translation>줄과 문서 끝도 표시</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
-        <translation type="unfinished"></translation>
+        <translation>날짜 및 시간 형식:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
-        <translation type="unfinished"></translation>
+        <translation>일부 텍스트 편집기는 마지막 줄이 비어 있지
+않은 문서를 열 수 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
-        <translation type="unfinished"></translation>
+        <translation>저장할 때 빈 마지막 줄 확인</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
-        <translation type="unfinished"></translation>
+        <translation>저장할 때 후행 공백 제거</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
-        <translation type="unfinished"></translation>
+        <translation>마우스 휠을 사용한 관성 스크롤</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>파일</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>파일 관리</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
-        <translation type="unfinished"></translation>
+        <translation>마지막 창의 파일로 시작</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1674,103 +1721,113 @@
 If the script is not run in a terminal
 emulator, the output and error messages
 will be shown by a popup dialog.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 명령은 인수가 있는 시작 명령일 수
+있습니다(예: XTerm에서 프로세스를
+실행하기 위한 "xterm -hold").
+
+명령을 비워 두면 파일이 직접 실행됩니다.
+
+스크립트가 터미널 에뮬레이터에서
+실행되지 않으면 출력 및 오류 메시지가
+팝업 대화상자에 표시됩니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>이 명령으로 시작: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>명령 + 인수</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>최근 수정된 파일 표시하기(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>최근 열어본 파일 보기(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>열려 있는 파일을 자동으로 저장:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>도움말</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="163"/>
         <source>Start with side-pane mode</source>
-        <translation type="unfinished"></translation>
+        <translation>사이드 창 모드로 시작</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
 and-drop either.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 옵션을 선택하면 단일 탭의 유용한 툴팁과 컨텍스트 메뉴가
+손실될 뿐만 아니라 탭 끌어서 놓기로 단일 탭 창을 다른 창으로
+병합할 수 없습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
-        <translation type="unfinished"></translation>
+        <translation>단일 탭 표시 안 함(&D)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
-        <translation type="unfinished">텍스트</translation>
+        <translation>텍스트</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
-        <translation type="unfinished">텍스트 편집기</translation>
+        <translation>텍스트 편집기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 줄 바꿈(&W)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 자동 들여쓰기(&I)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
-        <translation type="unfinished"></translation>
+        <translation>항상 줄 번호 표시(&N)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 구문 강조 표시(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
-        <translation type="unfinished"></translation>
+        <translation>어두운 색상 구성표(&O)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
-        <translation type="unfinished"></translation>
+        <translation>배경 색상 값: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1779,16 +1836,22 @@
 the Run button, that appears on the toolbar/filemenu
 when needed, or by its shortcut Ctrl+E. Then, the
 process could be killed by Ctrl+Alt+E.</source>
-        <translation type="unfinished"></translation>
+        <translation>여기에는 Shell 및 Python과 같은 스크립트 언어로
+작성된 실행 파일만 포함됩니다.
+
+선택되어 있고 열린 파일이 실행 가능한 경우,
+필요할 때 도구 모음/파일 메뉴에 나타나는 실행 버튼을
+클릭하거나 단축키 Ctrl+E를 사용하여 파일을 실행합니다.
+그런 다음 Ctrl+Alt+E로 프로세스를 종료할 수 있습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
-        <translation type="unfinished"></translation>
+        <translation>적용하려면 창을 다시 열어야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1797,212 +1860,236 @@
 background, between 0 and 50.
 
 Needs window reopening to take effect.</source>
-        <translation type="unfinished"></translation>
+        <translation>배경의 색상 값입니다.
+255는 흰색, 0은 검정색을 의미합니다.
+
+밝은 배경의 경우, 230에서 255 사이, 
+어두운 배경의 경우, 0에서 50 사이입니다.
+
+적용하려면 창을 다시 열어야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
-        <translation type="unfinished"></translation>
+        <translation>실행 가능한 스크립트 실행</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
 
 Needs application restart to take effect.</source>
-        <translation type="unfinished"></translation>
+        <translation>FeatherPad가 최근에 수정하거나 연 파일의
+최대 수입니다. 기본값은 10입니다.
+
+적용하려면 프로그램을 다시 시작해야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
 
 Leave empty for:
 MMM dd, yyyy, hh:mm:ss</source>
-        <translation type="unfinished"></translation>
+        <translation>날짜와 시간을 붙여넣을 때 사용합니다.
+
+이 대화상자를 닫은 후에 적용됩니다.
+
+다음 항목은 비워 둡니다:
+MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
-        <translation type="unfinished"></translation>
+        <translation>텍스트 탭 크기:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
-        <translation type="unfinished"></translation>
+        <translation> 공백</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
-        <translation type="unfinished"></translation>
+        <translation>굵은 텍스트 커서</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
-        <translation type="unfinished"></translation>
+        <translation>커서가 텍스트 보기 안에 있는 경우,
+마우스 휠 스크롤이 관성이어야 합니까?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>맞춤법 검사</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전에는 ".dic"로 끝나는 이름이 있으며
+이름은 같지만 ".aff"로 끝나는 접미사 파일과 함께
+있어야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전 경로:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>사전에 추가...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 옵션을 선택하지 않으면,
+문서 시작부터 맞춤법 검사가 시작됩니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
-        <translation type="unfinished"></translation>
+        <translation>텍스트 커서에서 맞춤법 검사 시작</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
-        <translation type="unfinished"></translation>
+        <translation>최근 파일 수: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
-        <translation type="unfinished"></translation>
+        <translation>50보다 크지 않은 경우에만 가능합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
-        <translation type="unfinished"></translation>
+        <translation>존재하며 저장할 수 있는 파일에만 해당됩니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
-        <translation type="unfinished"></translation>
+        <translation> 분</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
 This can be useful under certain circumstances,
 e.g. for changing the time stamp or removing the
 trailing spaces of a text file.</source>
-        <translation type="unfinished"></translation>
+        <translation>이 옵션을 선택하면 열려 있는 파일을 수정하지 않은
+상태에서도 저장 버튼/메뉴 항목을 사용할 수 있습니다.
+
+이 기능은 타임스탬프를 변경하거나
+텍스트 파일의 후행 공백을 제거하는 등의
+특정 상황에서 유용할 수 있습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
-        <translation type="unfinished"></translation>
+        <translation>수정되지 않은 파일 저장 허용</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
-        <translation type="unfinished"></translation>
+        <translation>대신 경고를 표시합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>텍스트가 아닌 파일을 열지 않기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 파일을 복사할 때 FeatherPad에
+붙여넣으면 파일이 열립니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>파일 대신 경로 붙여넣기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>바로가기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
-        <translation type="unfinished"></translation>
+        <translation>동작</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>바로가기</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>기본 바로가기 복원.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>기본값</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>문법 색상</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
-        <translation type="unfinished"></translation>
+        <translation>요소</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
-        <translation type="unfinished"></translation>
+        <translation>텍스트 색상</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished"></translation>
+        <translation>공백 색상 값:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>행 번호가 표시된 경우에만 효과가 있습니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>현재 줄 강조 표시 값:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본 구문 색상을 복원합니다.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>닫기</translation>
     </message>
@@ -2010,7 +2097,8 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>편집 모드에서 단축키를 지우려면
+수정자 키를 누르십시오.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
@@ -2018,150 +2106,150 @@
         <translation>색을 더블 클릭하여 변경.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>파일</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
-        <translation type="unfinished"></translation>
+        <translation>파일</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
-        <translation type="unfinished"></translation>
+        <translation>경고: 모호한 단축키가 감지되었습니다!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
-        <translation type="unfinished"></translation>
+        <translation>기능, URL,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
-        <translation type="unfinished"></translation>
+        <translation>기본 제공 기능</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
-        <translation type="unfinished"></translation>
+        <translation>주석</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
-        <translation type="unfinished"></translation>
+        <translation>인용구</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
-        <translation type="unfinished"></translation>
+        <translation>유형</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
-        <translation type="unfinished"></translation>
+        <translation>키워드</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
-        <translation type="unfinished"></translation>
+        <translation>숫자</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>정규식, 코드블록, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
-        <translation type="unfinished"></translation>
+        <translation>문서 블록, XML/HTML 요소…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
-        <translation type="unfinished"></translation>
+        <translation>마크다운 제목, CSS 값,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
-        <translation type="unfinished"></translation>
+        <translation>추가 요소</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
-        <translation type="unfinished"></translation>
+        <translation>변경 사항을 적용하려면 응용 프로그램을 다시 시작해야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
-        <translation type="unfinished"></translation>
+        <translation>변경 사항을 적용하려면 창을 다시 열어야 합니다.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>최근 열어본 파일(&R)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>최근 수정(&M)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
-        <translation type="unfinished"></translation>
+        <translation>입력한 단축키가 예약되었습니다.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
-        <translation type="unfinished"></translation>
+        <translation>Hunspell 사전 파일 (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
-        <translation type="unfinished"></translation>
+        <translation>구문 색상 선택</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>검색...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>대/소문자 구분</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>전체 단어</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>정규식</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>정규식을 포함하여 검색...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>다음</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>이전</translation>
     </message>
@@ -2216,7 +2304,8 @@
         <location filename="../../sessionDialog.ui" line="159"/>
         <source>By default, all files that are opened in all
 windows will be included in the saved session.</source>
-        <translation type="unfinished"></translation>
+        <translation>기본적으로 모든 창에서 열리는 모든 파일은
+저장된 세션에 포함됩니다.</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="163"/>
@@ -2257,7 +2346,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="135"/>
         <source>Save the current session under the given title.</source>
-        <translation type="unfinished"></translation>
+        <translation>주어진 제목으로 현재 세션을 저장합니다.</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="138"/>
@@ -2272,17 +2361,17 @@
     <message>
         <location filename="../../session.cpp" line="179"/>
         <source>Nothing saved.<br>No file was opened.</source>
-        <translation type="unfinished"></translation>
+        <translation>저장된 내용이 없습니다.<br>열린 파일이 없습니다.</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="277"/>
         <source>No file exists or can be opened.</source>
-        <translation type="unfinished"></translation>
+        <translation>파일이 없거나 열 수 없습니다.</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="279"/>
         <source>Not all files exist or can be opened.</source>
-        <translation type="unfinished"></translation>
+        <translation>일부 파일이 존재하지 않거나 열 수 있습니다.</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="314"/>
@@ -2313,7 +2402,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>필터...</translation>
     </message>
@@ -2361,10 +2450,10 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translatorcomment>정확한 표현인지 의심됨.</translatorcomment>
-        <translation type="unfinished">현재 줄을 가운데로 이동하기 위해 더블 클릭</translation>
+        <translation>현재 줄을 중심으로 두 번 클릭</translation>
     </message>
 </context>
 </TS>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_lt.ts featherpad-1.0.1/featherpad/data/translations/featherpad_lt.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_lt.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_lt.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licencija</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Be pavadinimo</translation>
     </message>
@@ -37,7 +37,7 @@
         <source>Select text from cursor to this line
 (Ctrl+Shift+J)</source>
         <translation>Žymėti tekstą nuo žymeklio iki šios eilutės
-(Ctrl(Vald)+Shift(Lyg2)+J)</translation>
+(Ctrl+Shift+J)</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="111"/>
@@ -47,7 +47,7 @@
     <message>
         <location filename="../../fp.ui" line="114"/>
         <source>Ctrl+Shift+J</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+J</translation>
+        <translation>Ctrl+Shift+J</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="149"/>
@@ -66,9 +66,9 @@
         <translation>&Parinktys</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Koduotė</translation>
     </message>
@@ -116,7 +116,7 @@
     <message>
         <location filename="../../fp.ui" line="500"/>
         <source>Ctrl+N</source>
-        <translation>Ctrl(Vald)+N</translation>
+        <translation>Ctrl+N</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="505"/>
@@ -131,11 +131,11 @@
     <message>
         <location filename="../../fp.ui" line="511"/>
         <source>Ctrl+O</source>
-        <translation>Ctrl(Vald)+O</translation>
+        <translation>Ctrl+O</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>Į&rašyti</translation>
     </message>
@@ -147,7 +147,7 @@
     <message>
         <location filename="../../fp.ui" line="525"/>
         <source>Ctrl+S</source>
-        <translation>Ctrl(Vald)+S</translation>
+        <translation>Ctrl+S</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="533"/>
@@ -162,7 +162,7 @@
     <message>
         <location filename="../../fp.ui" line="539"/>
         <source>Ctrl+Z</source>
-        <translation>Ctrl(Vald)+Z</translation>
+        <translation>Ctrl+Z</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="547"/>
@@ -177,7 +177,7 @@
     <message>
         <location filename="../../fp.ui" line="553"/>
         <source>Ctrl+Shift+Z</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+Z</translation>
+        <translation>Ctrl+Shift+Z</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="561"/>
@@ -188,7 +188,7 @@
     <message>
         <location filename="../../fp.ui" line="567"/>
         <source>Ctrl+Shift+R</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+R</translation>
+        <translation>Ctrl+Shift+R</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="572"/>
@@ -198,7 +198,7 @@
     <message>
         <location filename="../../fp.ui" line="578"/>
         <source>Ctrl+F</source>
-        <translation>Ctrl(Vald)+F</translation>
+        <translation>Ctrl+F</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="586"/>
@@ -208,7 +208,7 @@
     <message>
         <location filename="../../fp.ui" line="589"/>
         <source>Ctrl+R</source>
-        <translation>Ctrl(Vald)+R</translation>
+        <translation>Ctrl+R</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="594"/>
@@ -218,7 +218,7 @@
     <message>
         <location filename="../../fp.ui" line="597"/>
         <source>Ctrl+Shift+S</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+S</translation>
+        <translation>Ctrl+Shift+S</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="602"/>
@@ -228,7 +228,7 @@
     <message>
         <location filename="../../fp.ui" line="605"/>
         <source>Ctrl+P</source>
-        <translation>Ctrl(Vald)+P</translation>
+        <translation>Ctrl+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="610"/>
@@ -238,7 +238,7 @@
     <message>
         <location filename="../../fp.ui" line="613"/>
         <source>Ctrl+Shift+D</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+D</translation>
+        <translation>Ctrl+Shift+D</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="618"/>
@@ -248,7 +248,7 @@
     <message>
         <location filename="../../fp.ui" line="621"/>
         <source>Ctrl+Shift+Q</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+Q</translation>
+        <translation>Ctrl+Shift+Q</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="626"/>
@@ -258,7 +258,7 @@
     <message>
         <location filename="../../fp.ui" line="629"/>
         <source>Ctrl+Q</source>
-        <translation>Ctrl(Vald)+Q</translation>
+        <translation>Ctrl+Q</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="637"/>
@@ -268,7 +268,7 @@
     <message>
         <location filename="../../fp.ui" line="640"/>
         <source>Ctrl+X</source>
-        <translation>Ctrl(Vald)+X</translation>
+        <translation>Ctrl+X</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="648"/>
@@ -278,7 +278,7 @@
     <message>
         <location filename="../../fp.ui" line="651"/>
         <source>Ctrl+C</source>
-        <translation>Ctrl(Vald)+C</translation>
+        <translation>Ctrl+C</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="656"/>
@@ -288,7 +288,7 @@
     <message>
         <location filename="../../fp.ui" line="659"/>
         <source>Ctrl+V</source>
-        <translation>Ctrl(Vald)+V</translation>
+        <translation>Ctrl+V</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="667"/>
@@ -303,7 +303,7 @@
     <message>
         <location filename="../../fp.ui" line="675"/>
         <source>Ctrl+A</source>
-        <translation>Ctrl(Vald)+A</translation>
+        <translation>Ctrl+A</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="680"/>
@@ -318,7 +318,7 @@
     <message>
         <location filename="../../fp.ui" line="691"/>
         <source>Ctrl+L</source>
-        <translation>Ctrl(Vald)+L</translation>
+        <translation>Ctrl+L</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="702"/>
@@ -328,7 +328,7 @@
     <message>
         <location filename="../../fp.ui" line="705"/>
         <source>Ctrl+W</source>
-        <translation>Ctrl(Vald)+W</translation>
+        <translation>Ctrl+W</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="716"/>
@@ -338,7 +338,7 @@
     <message>
         <location filename="../../fp.ui" line="719"/>
         <source>Ctrl+I</source>
-        <translation>Ctrl(Vald)+I</translation>
+        <translation>Ctrl+I</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="730"/>
@@ -348,7 +348,7 @@
     <message>
         <location filename="../../fp.ui" line="733"/>
         <source>Ctrl+Shift+H</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+H</translation>
+        <translation>Ctrl+Shift+H</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="738"/>
@@ -358,12 +358,12 @@
     <message>
         <location filename="../../fp.ui" line="741"/>
         <source>Ctrl+Shift+P</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+P</translation>
+        <translation>Ctrl+Shift+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="749"/>
         <source>Ctrl+H</source>
-        <translation>Ctrl(Vald)+H</translation>
+        <translation>Ctrl+H</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="754"/>
@@ -393,7 +393,7 @@
     <message>
         <location filename="../../fp.ui" line="975"/>
         <source>Ctrl+J</source>
-        <translation>Ctrl(Vald)+J</translation>
+        <translation>Ctrl+J</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="983"/>
@@ -403,7 +403,7 @@
     <message>
         <location filename="../../fp.ui" line="986"/>
         <source>Ctrl+Shift+E</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+E</translation>
+        <translation>Ctrl+Shift+E</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1089"/>
@@ -413,7 +413,7 @@
     <message>
         <location filename="../../fp.ui" line="1095"/>
         <source>Ctrl+E</source>
-        <translation>Ctrl(Vald)+E</translation>
+        <translation>Ctrl+E</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1100"/>
@@ -438,7 +438,7 @@
     <message>
         <location filename="../../fp.ui" line="1114"/>
         <source>Ctrl+M</source>
-        <translation>Ctrl(Vald)+M</translation>
+        <translation>Ctrl+M</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1119"/>
@@ -448,7 +448,7 @@
     <message>
         <location filename="../../fp.ui" line="1122"/>
         <source>Ctrl+Alt+P</source>
-        <translation>Ctrl(Vald)+Alt+P</translation>
+        <translation>Ctrl+Alt+P</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1127"/>
@@ -458,7 +458,7 @@
     <message>
         <location filename="../../fp.ui" line="1130"/>
         <source>Ctrl+Shift+V</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+V</translation>
+        <translation>Ctrl+Shift+V</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1135"/>
@@ -469,7 +469,7 @@
     <message>
         <location filename="../../fp.ui" line="1141"/>
         <source>Ctrl+Shift+U</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+U</translation>
+        <translation>Ctrl+Shift+U</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1146"/>
@@ -480,7 +480,7 @@
     <message>
         <location filename="../../fp.ui" line="1152"/>
         <source>Ctrl+Shift+L</source>
-        <translation>Ctrl(Vald)+Shift(Lyg2)+L</translation>
+        <translation>Ctrl+Shift+L</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1157"/>
@@ -546,7 +546,7 @@
     <message>
         <location filename="../../fp.ui" line="997"/>
         <source>Ctrl+T</source>
-        <translation>Ctrl(Vald)+T</translation>
+        <translation>Ctrl+T</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1010"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Pakeitimas</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Pakeisti visus</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Paskiausiai atverti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Užverti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Įrašyti pakeitimus?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Apsilankykite tame lange arba, tiesiog, užverkite jo dialogą!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokumentas buvo modifikuotas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Atmesti &pakeitimus</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Atsisakyti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Visiems ne</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Neįrašytas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Eilutės</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Paž. simbolių</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Žodžiai</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Šioje kortelėje yra vykdomas kitas procesas!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Scenarijaus failas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Kitame FeatherPad lange yra modalinis dialogas!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Failo nėra.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Atverti nuorodą</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Kopijuoti nuorodą</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Kiekvienai kortelei leidžiama tik po vieną procesą.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Scenarijaus išvestis</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Išvalyti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad neatveria failų, didesnių nei 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Netekstiniai failai neatveriami!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Žiūrėkite Nuostatos → Failai → Neleisti atverti netekstinius failus</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Kai kurių failų nepavyko atverti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Gali būti, kad neturite skaitymo teisių.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Neredaguojami failai!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Netekstiniai failai ar failai su daug eilučių negali būti redaguojami.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Aptikta ankstesnė strigtis!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Pageidaujama, kad užvertumėte visus FeatherPad langus ir pradėtumėte iš naujo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Šaknies egzempliorius</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Visi failai (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Visi failai (*);;.%1 failai (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Atverti failą...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 failai (*.%1);;Visi failai (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Įrašyti kaip...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Išsaugoti koduotę ir įrašyti kaip...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Įrašoma pagrindinio naudotojo (root) teisėmis.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Laukiama tapatybės nustatymo...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>„pkexec“ nerasta. Įsidiekite Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Taip</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Ne</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Atsisakyti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Ar norite naudoti <b>MS Windows</b> eilučių pabaigas?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Tai gali praversti skaitomumui, naudojant MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Nepavyksta įrašyti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Žinynas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintaksė</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Didžiulis failas(-ai) neatverti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Tabuliavimo ženklai yra paversti tarpais.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Pažymėtas tekstas buvo per ilgas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Jis nėra pilnai apdorotas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Šis failas buvo modifikuotas kitur arba kitokiu būdu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Elkitės atsargiai įkeldami šį dokumentą iš naujo ar jį įrašydami!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Vyksta spausdinimas...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Spausdinti dokumentą</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Spausdinimas užbaigtas.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 puslapiai</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Kopijuoti paskirties kelią</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Atverti paskirtį čia</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopijuoti galutinį paskirties kelią</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Atverti galutinę paskirtį čia</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Atverti vidinį aplanką</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Turite pridėti Hunspell žodyną.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Žiūrėkite Nuostatos → Tekstas → Rašybos tikrinimas!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell žodyno nėra.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell žodynas nėra lydimas pridedamo failo.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Dokumente nėra rašymo su klaidomis.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Pradedant nuo teksto žymeklio nėra rašymo su klaidomis.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Rašybos tikrinimas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Kai kurių failų nepavyksta įrašyti!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Vertėjai</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Supaprastintas, palaikantis korteles, grynųjų tekstų redaktorius</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>pagrįstas Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autorius</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>dar žinomas kaip</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Apie FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Jokių pakeitimų</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Vienas pakeitimas</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln pakeitimas</numerusform>
@@ -1250,12 +1262,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>Pirmieji 1000 pakeitimų yra paryškinti.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Viršyta sintaksės paryškinimo dydžio riba.</translation>
     </message>
@@ -1263,13 +1275,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
-        <translation>Ctrl(Vald)+H</translation>
+        <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1339,7 +1351,7 @@
     <message>
         <location filename="../../lineedit.cpp" line="34"/>
         <source>Clear text (Ctrl+K)</source>
-        <translation>Išvalyti tekstą (Ctrl(Vald)+K)</translation>
+        <translation>Išvalyti tekstą (Ctrl+K)</translation>
     </message>
 </context>
 <context>
@@ -1436,64 +1448,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Meniu juostos prieigos klavišai yra aktyvuojami Alt klavišu
+ir gali trukdyti spartiesiems klavišams.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Išjungti meniu juostos prieigos klavišus</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Pagal numatymą, slėpti paieškos &juostą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Pagal numatymą, kiekvienas paieškos
 įrašas turi atskirą paieškos istoriją.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Naudoti bendrinamą paieškos istoriją</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Visada rodyti &būsenos juostą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Rodyti būsenos juostoje žymeklio vietą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Įsigalios, užvėrus šį dialogą.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Viršus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Apačia</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Kairė</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Dešinė</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1504,17 +1528,17 @@
 Kortelių naršymas pelės ratuku nebus paveiktas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>&Cikliškai perjunginėti kortelių naršymą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Užvėrus paskutinę kortelę, užverti langą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1527,12 +1551,12 @@
 kad turi kelis darbalaukius.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Visada atverti atskiruose languose</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1543,32 +1567,32 @@
 Kai kurios darbalaukio aplinkos, tokios kaip KDE ir LXQt, pateikia failų dialogus.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Savas failų dialogas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Nuimkite žymėjimą, norėdami naudoti Lygiaplotį (Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Prisiminti šri&ftą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Tai apima įvairius skliaustelius, riestinius skliaustus ir kabutes.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Automatiniai &skliaustai</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1577,113 +1601,114 @@
 ilguoju brūkšniu.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Rašant, pakeisti trys taškus ir dvigubus brūkšnelius</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Paryškinti tam tikro raidžių dydžio ir
+ištisus pažymėto teksto atitikmenis.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Žymėjimų paryškinimas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Niekada neparyškinti sintaksės failams, kurie > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Tai būsenos juostoje sukuria meniu mygtuką,
 skirtą keisti sintaksę.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Palaikyti sintaksės nustelbimą</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Paryškinus sintaksę, rodyti tarpus,
 tabuliavimus ir tabuliavimo eilutes.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Rodyti tarpus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Vertikalių pozicijų eilutės bus nubrėžtos tik tuomet,
 jei redaktoriaus šriftas yra fiksuoto dydžio (pvz., Lygiaplotis).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Rodyti vertikalias eilutes pradedant nuo šios pozicijos:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Taip pat rodyti eilučių ir dokumentų pabaigas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Datos ir laiko formatas:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Kai kurie tekstų redaktoriai negali atverti dokumentus,
 kuriuose paskutinė eilutė nėra tuščia.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Įrašant, užtikrinti kad paskutinė eilutė būtų tuščia</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Įrašant, šalinti galinius tarpus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inercinis slinkimas pelės ratuku</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Failai</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Failų tvarkymas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Pradėti su paskutinio lango failais</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1706,32 +1731,32 @@
 bus rodomi iškylančiajame dialoge.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Pradėti, naudojant šią komandą: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Komanda + Argumentai</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Rodyti paskiausia&i modifikuotus failus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Rodyti paskiausiai at&vertus failus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Įrašyti pakeitimus atvertiems failams kas:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Žinynas</translation>
     </message>
@@ -1741,7 +1766,7 @@
         <translation>Pradėti, naudojant šoninio polangio veikseną</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1751,57 +1776,57 @@
 langų su kortelėmis, velkant korteles.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Nerodyti vienintelės kortelės</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Tekstas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Tekstų redaktorius</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Pagal numatymą, s&kaidyti eilutes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Pagal numatymą, daryti automatinę į&trauką</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Visada rodyti eilučių &numerius</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Pagal numatymą, paryškinti s&intaksę</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Tamsių s&palvų schema</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Foninės spalvos reikšmė: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1817,17 +1842,17 @@
 vykdomasis, failas bus įvykdomas, spustelėjant
 mygtuką Vykdyti, kuris, prireikus, atsiranda
 įrankių juostoje/failo meniu arba sparčiuoju klavišu
-Ctrl(Vald)+E. Tuomet, procesą galima nutraukti,
-paspaudus Ctrl(Vald)+Alt+E.</translation>
+Ctrl+E. Tuomet, procesą galima nutraukti,
+paspaudus Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Tam, kad įsigaliotų, reikia atverti langą iš naujo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1846,13 +1871,13 @@
 Tam, kad įsigaliotų, reikia atverti langą iš naujo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Vykdyti vykdomuosius scenarijus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1864,8 +1889,8 @@
 Tam, kad įsigaliotų, reikia paleisti programą iš naujo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1880,35 +1905,35 @@
 mmm dd, MMMM, vv:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Teksto tabuliavimo dydis:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> tarpai</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Storas teksto žymeklis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Ar pelės ratuko slinkimas turėtų būti inercinis,
 jei žymeklis yra teksto rodinio viduje?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Rašybos tikrinimas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1917,51 +1942,51 @@
 tačiau turinčiu ".aff" prievardį.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell žodyno kelias:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Pridėti žodyną...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Jei čia žymėjimas yra nuimtas, tuomet rašybos tikrinimas
 bus pradedamas nuo dokumento pradžios.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Pradėti rašybos tikrinimą nuo teksto žymeklio</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Paskiausiai naudotų failų skaičius: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Tik jeigu jų skaičius nėra didesnis už 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Tik failams, kurie yra ir gali būti įrašyti.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1977,96 +2002,97 @@
 šalinimui.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Leisti įrašyti nemodifikuotus failus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Vietoj to, rodyti įspėjimą.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Neleisti atverti netekstinius failus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>Pagal numatymą, nukopijavus failus ir juos įdėjus į
+FeatherPad, jie bus atveriami.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Įdėti kelius, vietoj failų</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Spartieji klavišai</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Veiksmas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Spartusis klavišas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Atkurti numatytuosius sparčiuosius klavišus.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Numatytieji</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Sintaksės spalvos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elementas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Teksto spalva</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Tarpų spalvos reikšmė:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Veikia tik tuomet, jei yra rodomi eilučių numeriai.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Dabartinės eilutės paryškinimo reikšmė:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Atkurti numatytąsias sintaksės spalvas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Užverti</translation>
     </message>
@@ -2074,7 +2100,8 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Norėdami taisymo veiksenoje išvalyti spartųjį klavišą,
+paspauskite modifikatoriaus klavišą.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
@@ -2082,111 +2109,111 @@
         <translation>Spustelėkite du kartus ant spalvos norėdami ją pakeisti.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>failų</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>failas</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Įspėjimas: Aptiktas dviprasmiškas spartusis klavišas!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funkcijos, URL,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Įtaisytosios funkcijos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Komentarai</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citatos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipai</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Raktažodžiai</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Skaičiai</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Reguliarieji reiškiniai, kodo blokai,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Dokumento blokai, XML/HTML elementai,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Ženklinimo antraštės, CSS reikšmės,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Papildomi elementai</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Tam, kad įsigaliotų pakeitimai, reikia paleisti programą iš naujo.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Tam, kad įsigaliotų pakeitimai, reikia langą atverti iš naujo.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Pas&kiausiai atverti</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Paskiausiai &modifikuoti</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Įrašytas spartusis klavišas buvo rezervuotas.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell žodyno failai (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Pasirinkti sintaksės spalvą</translation>
     </message>
@@ -2194,38 +2221,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Ieškoti...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Skirti raidžių dydį</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Visas žodis</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Reguliarusis reiškinys</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Ieškoti naudojant reguliarųjį reiškinį...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Kitas</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Ankstesnis</translation>
     </message>
@@ -2268,13 +2295,13 @@
         <location filename="../../sessionDialog.ui" line="98"/>
         <location filename="../../sessionDialog.ui" line="108"/>
         <source>Del</source>
-        <translation>Del(Šal)</translation>
+        <translation>Del</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="115"/>
         <location filename="../../sessionDialog.ui" line="125"/>
         <source>Ctrl+Del</source>
-        <translation>Ctrl(Vald)+Del(Šal)</translation>
+        <translation>Ctrl+Del</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="159"/>
@@ -2378,7 +2405,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtruoti...</translation>
     </message>
@@ -2424,7 +2451,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Spustelėkite du kartus, norėdami centruoti esamą eilutę</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_nb_NO.ts featherpad-1.0.1/featherpad/data/translations/featherpad_nb_NO.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_nb_NO.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_nb_NO.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Lisens</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Uten tittel</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Valg</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Koding</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Lagre</translation>
     </message>
@@ -486,7 +486,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>For stor forbokstav</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -536,7 +536,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>Tekstfaner til mellomrom</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Erstatning</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Erstatt alle</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Nylig åpnede</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Lukk</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Lagre endringer?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Ta deg av det vinduet eller lukk dets dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokumentet er endret.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Forkast endringer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Avbryt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nei til alle</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Ikke lagret</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Linjer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Velg tegn</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Ord</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>En annen prosess kjører i denne fanen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Skriptfil</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Et annet FeatherPad-vindu har en modal dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Plassering:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Filen fins ikke.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Åpne lenke</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Kopier lenke</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Kun en prosess per fane er tillatt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Resultat fra skript</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Tøm</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad åpner ikke filer større enn 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Filer som ikke er tekstfiler åpnes ikke!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Se Innstillinger → Filer → Ikke tillat åpning av filer som ikke er tekstfiler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Noen filer kunne ikke åpnes!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Du har kanskje ikke tillatelsen til å lese.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Ikke-redigerbar fil!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Filer som ikke er tekst eller filer med veldig lange linjer kan ikke redigeres.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>En tidligere krasj detektert!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Lukk helst alle FeatherPad-vinduer og start igjen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Root-instans</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Alle filer (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Alle filer (*);;.%1 filer (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Åpne fil...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 filer (*.%1);;Alle filer (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Lagre som...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Bevar koding og lagre som...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation type="unfinished">Lagrer som rot-bruker.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>Venter på identitetsbekreftelse …</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec" ble ikke funnet. Installer Polkit.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Ja</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nei</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Avbryt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Vil du bruke <b>MS Windows</b>-linjeskift?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Det kan være bra for lesbarheten i MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Klarte ikke lagre!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Hjelp</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntaks</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Kjempestore filer ikke åpnet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tekstfaner konverteres til mellomrom.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
-        <translation type="unfinished"></translation>
+        <translation>Valgt tekst er for lang.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Den er ikke ferdigbehandlet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Filen er endret et annet sted eller på en annen måte!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Vær forsiktig med å laste inn på nytt eller lagre dette dokumentet!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>Skriver ut …</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Skriv ut dokument</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Utskrift utført.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 sider</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Kopier målsti</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Åpne mål her</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Kopier endelig målsti</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Åpne endelig mål her</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Åpne inneholdende mappe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Du må legge til en Hunspell-ordbok.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Se Innstillinger → Tekst → Stavekontroll!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell-ordboken fins ikke.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Det følger ikke med en affix-fil til Hunspell-ordboken.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Ingen stavefeil i dokumentet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Ingen stavefeil fra tekstmarkøren.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Stavekontroll</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Noen filer kan ikke lagres!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Oversettere</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Et lettvekts, fanebasert, tekstprogram</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>basert på Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Opphavsmann</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>også kjent som</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Om FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Ingen erstatning</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>En erstatning</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln erstatning</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>De første 1000 erstatningene er fremhevet.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Størrelsesbegrensningen for syntaksmerking er oversteget.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1435,64 +1447,75 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Skjul &søkelinje som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Som standard har hver søkeoppføring
 en separat søkehistorikk.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Bruk en delt søkehistorikk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Alltid vis &statuslinje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Vis markørplassering på statuslinje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Trer i kraft når denne dialogen er lukket.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Faneplassering: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Nord</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Sør</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Vest</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Øst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1526,17 @@
 Fanenavigasjon med musehjul påvirkes ikke.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Fanenavigasjon bryter &rundt</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Lukk vindu når siste fane lukkes</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1549,12 @@
 kanskje ikke at de har flere skrivebord.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Åpne alltid i separate vinduer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1542,32 +1565,32 @@
 Noen skrivebordsmiljø, som KDE og LXQt, leverer egne fildialoger.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Lokal fildialog</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Fjern kryss for Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Husk &skrift</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Dette dekker parenteser, krøllparenteser, vinkelparenteser og sitattegn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Automatisk &vinkelparenteser</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1576,113 +1599,114 @@
 mens man skriver, under de rette omstendigheter.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Erstatt triple punktum og doble bindestreker mens man skriver</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Framhev i henhold til små og store bokstaver
+av valgt tekst.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Utvalgsframheving</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Merk aldri syntaks for filer > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Dette oppretter en menyknapp på
 statuslinjen for å skifte syntaksen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Støtt overstyring av syntaks</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Vis mellomrom, tabulatorer og tabulatorlinjer
 når syntaksmerking er aktivert.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Vis blanktegn</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>De loddrette plasseringslinjene tegnes kun hvis
 editorens skrift har fast tegnbredde (som Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Vis loddrette linjer startende fra denne plasseringen:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Vis også linje- og dokumentslutt</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Dato- og klokkeslettformat:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Noen tekstprogram kan ikke åpne et dokument
 hvor den siste linje ikke er tom.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Sørg for en tom siste linje under lagring</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Fjern avsluttende mellomrom under lagring</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inertial scrolling med musehjul</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Filbehandling</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Start med filer fra siste vindu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1705,32 +1729,32 @@
 i en sprettoppdialog.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Start med denne kommandoen: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Kommando + Argumenter</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Vis n&ylig endrede filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Vis n&ylige åpnede filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Lagre endringer til åpnede filer hver:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Hjelp</translation>
     </message>
@@ -1740,7 +1764,7 @@
         <translation>Start med sidepanel-modus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1751,57 +1775,57 @@
 annet ved å dra og slippe et av dem.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Ikke vis en enkel fane</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Tekst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Tekstprogram</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Bryt linjer som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Automatisk &innrykk som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Vis alltid &linjenumre</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>&Syntaksmerking som standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>&Mørkt fargeskjema</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Bakgrunnens fargeverdi: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1820,13 +1844,13 @@
 Prosessen drepes med Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Krever at vindu åpnes på nytt før det trer i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1844,13 +1868,13 @@
 Krevet at vindu åpnes på nytt før det trer i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Kjør kjørbare skript</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1862,8 +1886,8 @@
 Krever omstart av programmet før endringene trer i kraft.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1878,35 +1902,35 @@
 MMM dd, åååå, tt:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tabulatorstørrelse for tekst:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> mellomrom</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Tykk tekstmarkør</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Skal musehjulets scrolling være inertial
 hvis markøren er innenfor tekstvisningen?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Stavekontroll</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1915,51 +1939,51 @@
 men som slutter med ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Sti til Hunspell-ordbok:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Legg til ordbok ...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Hvis den ikke er krysset av, så starter
 stavekontrollen fra dokumentets begynnelse.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Start stavekontroll fra tekstmarkøren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Antall nylige filer: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Kun hvis antallet er mindre enn 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Kun for filer som fins og kan lagres.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1974,96 +1998,97 @@
 mellomrom i en tekstfil.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Tillat at uendrede filer kan lagres</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Vis i stedet en advarsel.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Ikke tillat åpning av filer som ikke er tekstfiler</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>Som forvalg vil filer åpnes når de kopieres,
+såfremt de limes inn i FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Lim inn stier istedenfor filer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Snarveier</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Handling</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Snarvei</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Gjenopprett standard snarveier.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Standard</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Syntaksfarger</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Element</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Tekstfarge</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Fargeverdi for hvitt:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Brukes kun hvis linjenummer vises.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Nåværende linjeframhevelsesverdi:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Gjenopprett standard syntaksfarger.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Lukk</translation>
     </message>
@@ -2071,7 +2096,8 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Trykk en valgtast for å tømme en snarvei
+i redigeringsmoduset.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
@@ -2079,111 +2105,111 @@
         <translation>Dobbeltklikk på en farge for å forandre den.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>filer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>fil</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Advarsel: Tvetydig snarvei detektert!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funksjoner, URLer …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Innebygde funksjoner</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Kommentarer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Sitater</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Typer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Nøkkelord</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Tall</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Regelmessige uttrykk (Regex), kodeblokker …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Dokumentblokker, XML/HTML-elementer …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown-overskrifter, CSS-verdier …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Ekstra elementer</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Programmet må startes på nytt før endringene trer i kraft.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Vinduet må åpnes på nytt før endringene trer i kraft.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Nylig åpnede</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Nylig &endrede</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Den inntastede snarveien er reservert.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell-ordboksfiler (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Velg syntaksfarge</translation>
     </message>
@@ -2191,38 +2217,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Søk...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Forskjell på store og små bokstaver</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Hele ord</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Regulære uttrykk</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Søk med regulære uttrykk...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Neste</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Forrige</translation>
     </message>
@@ -2375,7 +2401,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filter...</translation>
     </message>
@@ -2421,7 +2447,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Dobbeltklikk for å midtstille gjeldende linje</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_nl.ts featherpad-1.0.1/featherpad/data/translations/featherpad_nl.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_nl.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_nl.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licentie</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Naamloos</translation>
     </message>
@@ -58,7 +58,7 @@
         <location filename="../../fp.ui" line="189"/>
         <location filename="../../fp.ui" line="980"/>
         <source>&Edit</source>
-        <translation>Be&werken</translation>
+        <translation>B&ewerken</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="219"/>
@@ -66,11 +66,11 @@
         <translation>&Opties</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
-        <translation>Tekencodering</translation>
+        <translation>Tekenset</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="282"/>
@@ -81,7 +81,7 @@
         <location filename="../../fp.ui" line="290"/>
         <location filename="../../fp.ui" line="746"/>
         <source>&Help</source>
-        <translation>&Help</translation>
+        <translation>&Hulp</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="390"/>
@@ -135,14 +135,14 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Opslaan</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="522"/>
         <source>Save the current tab</source>
-        <translation>Huidig tabblad opslaan</translation>
+        <translation>Sla het huidige tabblad op</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="525"/>
@@ -157,7 +157,7 @@
     <message>
         <location filename="../../fp.ui" line="536"/>
         <source>Undo</source>
-        <translation>Ongedaan maken</translation>
+        <translation>Maak ongedaan</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="539"/>
@@ -293,12 +293,12 @@
     <message>
         <location filename="../../fp.ui" line="667"/>
         <source>&Delete</source>
-        <translation>&Verwijderen</translation>
+        <translation>Verwij&deren</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="672"/>
         <source>&Select All</source>
-        <translation>&Alles selecteren</translation>
+        <translation>Alles &selecteren</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="675"/>
@@ -313,7 +313,7 @@
     <message>
         <location filename="../../fp.ui" line="688"/>
         <source>&Line Numbers</source>
-        <translation>&Regelnummers</translation>
+        <translation>Rege&lnummers</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="691"/>
@@ -323,7 +323,7 @@
     <message>
         <location filename="../../fp.ui" line="702"/>
         <source>&Wrap Lines</source>
-        <translation>&Regels omslaan</translation>
+        <translation>Regels af&breken</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="705"/>
@@ -343,7 +343,7 @@
     <message>
         <location filename="../../fp.ui" line="730"/>
         <source>&Syntax Highlighting</source>
-        <translation>&Syntaxmarkering</translation>
+        <translation>&Syntaxis markeren</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="733"/>
@@ -353,7 +353,7 @@
     <message>
         <location filename="../../fp.ui" line="738"/>
         <source>&Preferences</source>
-        <translation>&Voorkeuren</translation>
+        <translation>&Instellingen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="741"/>
@@ -378,12 +378,12 @@
     <message>
         <location filename="../../fp.ui" line="964"/>
         <source>Save with &Encoding</source>
-        <translation>Opslaan met &tekenreeks</translation>
+        <translation>Opslaan met t&ekenset</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="969"/>
         <source>&Jump to</source>
-        <translation>&Springen naar</translation>
+        <translation>&Ga naar regel</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="972"/>
@@ -486,13 +486,13 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Beginnen met lettergrootte</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
         <location filename="../../fp.ui" line="1171"/>
         <source>Last Active Tab</source>
-        <translation>Laatst actieve tabblad</translation>
+        <translation>Recentst actief tabblad</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1174"/>
@@ -536,12 +536,12 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>Tabs omzetten in spaties</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
         <source>&Detach Tab</source>
-        <translation>&Tabblad losmaken</translation>
+        <translation>Tabbla&d losmaken</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="997"/>
@@ -566,7 +566,7 @@
     <message>
         <location filename="../../fp.ui" line="1054"/>
         <source>Previous Ta&b</source>
-        <translation>&Vorig tabblad</translation>
+        <translation>Vorig ta&bblad</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1092"/>
@@ -581,12 +581,12 @@
     <message>
         <location filename="../../fp.ui" line="153"/>
         <source>Recently &Modified</source>
-        <translation>Recent &bewerkt</translation>
+        <translation>Onlangs &bewerkt</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="223"/>
         <source>&Encoding</source>
-        <translation>&Tekenreeks</translation>
+        <translation>T&ekenset</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="227"/>
@@ -601,18 +601,18 @@
     <message>
         <location filename="../../fp.ui" line="242"/>
         <source>&East European</source>
-        <translation>&Oost-Europees</translation>
+        <translation>Oost-&Europees</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="250"/>
         <source>Ea&st Asian</source>
-        <translation>&Oost-Aziatisch</translation>
+        <translation>Oo&st-Aziatisch</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Vervanging</translation>
     </message>
@@ -624,7 +624,7 @@
     <message>
         <location filename="../../fp.ui" line="583"/>
         <source>&Replace</source>
-        <translation>&Vervangen</translation>
+        <translation>Ve&rvangen</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="765"/>
@@ -734,12 +734,12 @@
     <message>
         <location filename="../../fp.ui" line="1030"/>
         <source>&Copy File Name</source>
-        <translation>&Bestandsnaam kopiëren</translation>
+        <translation>Bestandsnaam &kopiëren</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1035"/>
         <source>Copy File &Path</source>
-        <translation>&Bestandspad kopiëren</translation>
+        <translation>Bestan&dslocatie kopiëren</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1046"/>
@@ -799,449 +799,461 @@
         <translation>Alles vervangen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
-        <translation>&Recent geopend</translation>
+        <translation>&Onlangs geopend</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Sluiten</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Wijzigingen opslaan?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Kies een optie in dat venster of sluit het!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Het document is bewerkt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Wijzigingen &verwerpen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Annuleren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nee op alles</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Niet-opgeslagen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Regels</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Tekens</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Woorden</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Er is al een proces actief op dit tabblad!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Scriptbestand</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Een ander FeatherPad-venster bevat een modaal dialoogvenster!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Positie:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normaal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Het bestand bestaat niet.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Link openen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Link kopiëren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Er is slechts één proces per tabblad toegestaan.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Scriptuitvoer</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Wissen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad kan geen bestanden openen die groter zijn dan 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
-        <translation type="unfinished"></translation>
+        <translation>De niet-tekstbestanden zijn niet geopend!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
-        <translation type="unfinished"></translation>
+        <translation>Zie Instellingen → Bestanden → Geen niet-tekstbestanden openen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
-        <translation>Een of meerdere bestanden kunnen niet worden geopend!</translation>
+        <translation>Sommige bestanden kunnen niet worden geopend!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
-        <translation>Je hebt mogelijk heb geen leestoegang.</translation>
+        <translation>U heeft mogelijk heb geen leestoegang.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Bestand(en) is/zijn onbewerkbaar!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Bestanden die geen tekstbestanden zijn of een enorm aantal regels bevatten kunnen niet worden bewerkt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Eerdere crash gedetecteerd!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Sluit, bij voorkeur, alle FeatherPad-vensters en start opnieuw!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Root-instantie</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Alle bestanden (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Alle bestanden (*);;.%1-bestanden (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
-        <translation>Bestand openen...</translation>
+        <translation>Bestand openen…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1-bestanden (*.%1);;Alle bestanden (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
-        <translation>Opslaan als...</translation>
+        <translation>Opslaan als…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
-        <translation>Tekenreeks behouden en opslaan als...</translation>
+        <translation>Tekenset behouden en opslaan als…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation>Wordt opgeslagen als root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>Bezig met wachten op authenticatie…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>‘pkexec’ is niet aangetroffen - installeer Polkit.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Ja</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nee</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Annuleren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
-        <translation>Wil je <b>MS Windows</b>-compatibele regeleindes gebruiken?</translation>
+        <translation>Wil je <b>MS Windows</b>-compatibele regeleinden gebruiken?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
-        <translation>Dit kan helpen bij de leesbaarheid op MS Windows.</translation>
+        <translation>Dit kan de leesbaarheid op MS Windows vergroten.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Kan niet worden opgeslagen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Hulp</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Syntaxis</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Enorm(e) bestand(en) niet geopend!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Tabs worden omgezet in spaties.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
-        <translation type="unfinished"></translation>
+        <translation>De geselecteerde tekst is te lang.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Het is niet volledig verwerkt.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
-        <translation>Dit bestand is elders of anders bewerkt!</translation>
+        <translation>Dit bestand is elders of op een andere manier bewerkt!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
-        <translation>Wees voorzichtig met het herladen of opslaan van dit document!</translation>
+        <translation>Wees terughoudend met het herladen of opslaan van dit document!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>Bezig met afdrukken…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Document afdrukken</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Het afdrukken is voltooid.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 pagina's</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
-        <translation>Doelpad kopiëren</translation>
+        <translation>Doellocatie kopiëren</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Doel hier openen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Uiteindelijke doellocatie kopiëren</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Uiteindelijk doel hier openen</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Bijbehorende map openen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
-        <translation>Voeg een Hunpell-woordenboek toe.</translation>
+        <translation>Voeg een Hunspell-woordenboek toe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
-        <translation>Zie Voorkeuren → Tekst → Spellingcontrole!</translation>
+        <translation>Zie Instellingen → Tekst → Spellingcontrole!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Dit Hunspell-woordenboek is niet aanwezig.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Dit Hunspell-woordenboek is niet voorzien van een affix-bestand.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Geen spelfouten aangetroffen.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Geen spelfouten aangetroffen vanaf de cursorpositie.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Spellingcontrole</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Enkele bestanden kunnen niet worden opgeslagen!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Vertalers</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
-        <translation>Een lichtgewicht platte tekst-bewerker met tabbladen</translation>
+        <translation>Een lichte plattetekstbewerker met tabbladen</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
-        <translation>gebouwd met Qt</translation>
+        <translation>gemaakt met Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Maker</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>ook bekend als</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Over FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Geen vervanging</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Eén vervanging</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln vervanging</numerusform>
@@ -1249,26 +1261,26 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>De eerste 1000 vervangingen zijn gemarkeerd.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
-        <translation>Het groottelimiet voor syntaxmarkering is overschreden.</translation>
+        <translation>Het omvanglimiet van syntaxismarkering is overschreden.</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1279,7 +1291,7 @@
     <message>
         <location filename="../../fontDialog.ui" line="14"/>
         <source>Select Font</source>
-        <translation>Lettertype kiezen</translation>
+        <translation>Kies een lettertype</translation>
     </message>
     <message>
         <location filename="../../fontDialog.ui" line="38"/>
@@ -1295,7 +1307,7 @@
     <message>
         <location filename="../../fontDialog.ui" line="69"/>
         <source>Size:</source>
-        <translation>Lettergrootte:</translation>
+        <translation>Tekstgrootte:</translation>
     </message>
     <message>
         <location filename="../../fontDialog.ui" line="89"/>
@@ -1330,7 +1342,7 @@
     <message>
         <location filename="../../fontDialog.ui" line="149"/>
         <source>Preview</source>
-        <translation>Voorbeeld</translation>
+        <translation>Voorvertoning</translation>
     </message>
 </context>
 <context>
@@ -1346,7 +1358,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="14"/>
         <source>Preferences</source>
-        <translation>Voorkeuren</translation>
+        <translation>Instellingen</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="30"/>
@@ -1361,7 +1373,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="75"/>
         <source>Remember window &size on closing</source>
-        <translation>Ven&sterafmetingen onthouden bij sluiten</translation>
+        <translation>Ven&sterafmetingen bewaren na afsluiten</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="84"/>
@@ -1374,7 +1386,7 @@
     <message>
         <location filename="../../prefDialog.ui" line="87"/>
         <source>Start with this size: </source>
-        <translation>Opstarten met deze afmetingen: </translation>
+        <translation>Standaardafmetingen: </translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="100"/>
@@ -1391,13 +1403,13 @@
         <location filename="../../prefDialog.ui" line="148"/>
         <source>Enforcing a window position is not recommended
 and may not work with some window managers.</source>
-        <translation>Het afdwingen van een vensterpositie wordt niet aanbevolen
+        <translation>Het afdwingen van een vensterpositie is niet aanbevolen
 en werkt mogelijk niet met sommige vensterbeheerders.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="152"/>
         <source>Remember window &position on closing</source>
-        <translation>Venster&positie onthouden bij sluiten</translation>
+        <translation>Venster&positie bewaren na afsluiten</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="159"/>
@@ -1409,90 +1421,102 @@
     <message>
         <location filename="../../prefDialog.ui" line="188"/>
         <source>Uncheck for 1/5 of the width.</source>
-        <translation>Vink dit uit voor 1/5 van de breedte.</translation>
+        <translation>Kruis dit af voor 1/5 van de breedte.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="191"/>
         <source>Remember splitter position</source>
-        <translation>Splitspositie onthouden</translation>
+        <translation>Splitspositie bewaren</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="200"/>
         <source>Do not show &toolbar</source>
-        <translation>Werkbalk niet &tonen</translation>
+        <translation>We&rkbalk verbergen</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="207"/>
         <source>If the menubar is hidden,
 a menu button appears on the toolbar.</source>
         <translation>Als de menubalk verborgen is,
-dan verschijnt er een menuknop op de werkbalk.</translation>
+verschijnt er een menuknop op de werkbalk.</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="211"/>
         <source>Do not show &menubar</source>
-        <translation>&Menubalk niet tonen</translation>
+        <translation>&Menubalk verbergen</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Menu-sneltoetsen kunnen worden geactiveerd
+met Alt en kunnen botsen met aangepaste sneltoetsen.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Menu-sneltoetsen uitschakelen</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
-        <translation>Zoek&balk standaard verbergen</translation>
+        <translation>Zoek&balk verbergen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
-        <translation>Standaard heeft elke zoekterm
+        <translation>Standaard heeft elke zoekopdracht
 zijn eigen geschiedenis.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Zoekgeschiedenis samenvoegen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
-        <translation>St&atusbalk altijd tonen</translation>
+        <translation>St&atusbalk tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Cursorpositie tonen op statusbalk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
-        <translation>De wijziging wordt toegepast na sluiten van dit venster.</translation>
+        <translation>De wijziging wordt toegepast na het sluiten van dit venster.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
-        <translation>Tabbladpositie: </translation>
+        <translation>Tabbladlocatie: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Noordelijk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
-        <translation>Zuidelijk</translation>
+        <translation>Onderaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
-        <translation>Westelijk</translation>
+        <translation>Links</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
-        <translation>Oostelijk</translation>
+        <translation>Rechts</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1527,17 @@
 Tabbladnavigatie via het muiswiel wordt hier niet door beïnvloed.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
-        <translation>Tabbladnavigatie sl&aat om</translation>
+        <translation>Tabbladnavigatie omsl&aan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Venster sluiten na sluiten van laatste tabblad</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1524,51 +1548,51 @@
 op nieuwe tabbladen.
 
 Bij sommige werkomgevingen wordt er echter niet doorgegeven
-dat er meerdere bureaubladen aanwezig zijn.</translation>
+dat er meerdere werkbladen aanwezig zijn.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
-        <translation>Altijd openen in losse vensters</translation>
+        <translation>Bestanden openen in losse vensters</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
 Some desktop environments, like KDE and LXQt, provide files dialogs.</source>
-        <translation>Als dit wordt aangevinkt, dan wordt het bestandsvenster van
-de huidige werkomgeving gebruikt in plaats van die van Qt.
+        <translation>Kruis dit aan om het bestandsvenster van de huidige
+werkomgeving te gebruiken in plaats van dat van Qt.
 
-Sommige werkomgevingen, zoals KDE en LXQt, hebben bestandsvensters.</translation>
+Sommige werkomgevingen, zoals KDE en LXQt, hebben eigen bestandsvensters.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
-        <translation>Bestandsvenster van werkomgeving</translation>
+        <translation>Bestandsvenster van werkomgeving gebruiken</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
-        <translation>Vink uit om Monospace te gebruiken.</translation>
+        <translation>Kruis af om Monospace te gebruiken.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
-        <translation>Lettertype &onthouden</translation>
+        <translation>Ingesteld lettertype &gebruiken</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Dit beslaat enkele/dubbele aanhalingstekens en ronde/vierkante haakjes.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
-        <translation>Automatische &haakjes</translation>
+        <translation>Automatisch &haakjes plaatsen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1577,113 +1601,114 @@
 gedachtestreep.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Drie puntjes en dubbele streepjes vervangen tijdens het typen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Markeer hoofdlettergevoeligheid en gehele overeenkomsten
+in de geselecteerde tekst.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Selectie markeren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
-        <translation>Geen syntaxmarkering voor bestanden > </translation>
+        <translation>Syntaxis niet markeren in bestanden > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Dit plaatst een menuknop op de statusbalk
-waarmee de syntax kan worden gewijzigd.</translation>
+waarmee de syntaxis kan worden gewijzigd.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
-        <translation>Syntax kan worden gewijzigd</translation>
+        <translation>Syntaxiswijziging toestaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Toon spaties, tabs en tabregels
-bij het markeren van de syntax.</translation>
+bij het markeren van de syntaxis.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Witruimte tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>De verticale positielijnen worden alleen getoond als
 het lettertype een vastgezet lettertype is (zoals Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
-        <translation>Verticale lijnen tonen vanaf deze positie:</translation>
+        <translation>Verticale lijnen tonen vanaf positie:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
-        <translation>Ook regel- en documenteindes tonen</translation>
+        <translation>Regel- en documenteinden tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Datum- en tijdopmaak:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
-        <translation>Sommige tekstbewerker kunnen geen document openen
-dat geen lege regel bevat aan het einde.</translation>
+        <translation>Sommige tekstbewerkers kunnen geen document openen
+dat geen blanco regel aan het einde bevat.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
-        <translation>Lege regel aan einde invoegen bij opslaan</translation>
+        <translation>Blanco eindregel invoegen bij opslaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Achterliggende spaties verwijderen bij opslaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
-        <translation>Bewegingsloos scroll met muiswiel</translation>
+        <translation>Bewegingsloos scrollen met muiswiel</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Bestanden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Bestandsbeheer</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
-        <translation>Bestanden van laatste venster openen bij opstarten</translation>
+        <translation>Bestanden uit vorig venster openen na opstarten</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1695,7 +1720,7 @@
 emulator, the output and error messages
 will be shown by a popup dialog.</source>
         <translation>Dit kan elke opstartopdracht zijn, incl.
-parameters. Gebruik bijv. "xterm -hold"
+aanvullende opties. Gebruik bijv. ‘xterm -hold’
 om het proces uit te voeren in XTerm.
 
 Als het opdrachtveld blanco blijft, dan wordt
@@ -1706,103 +1731,103 @@
 getoond in een pop-upvenster.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
-        <translation>Opstarten met deze opdracht: </translation>
+        <translation>Opstartopdracht: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
-        <translation>Opdracht + Parameters</translation>
+        <translation>Opdracht + Aanvullende opties</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
-        <translation>Re&cent bewerkte bestanden tonen</translation>
+        <translation>Onlan&gs bewerkte bestanden tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
-        <translation>Re&cent geopende bestanden tonen</translation>
+        <translation>Onlan&gs geopende bestanden tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
-        <translation>Wijzigingen aan geopende bestanden opslaan, elke:</translation>
+        <translation>Bestandswijzigingen opslaan, elke:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Hulp</translation>
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="163"/>
         <source>Start with side-pane mode</source>
-        <translation>Opstarten met zijpaneelmodus</translation>
+        <translation>Zijpaneel tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
 and-drop either.</source>
-        <translation>Als dit wordt aangevinkt, dan verlies je niet alleen de informatieve
-hulpballon en het rechtermuisknopmenu van een los tabblad, maar
-je kunt ook geen venster meer samenvoegen met een ander door het
+        <translation>Kruis dit aan om niet alleen de informatieve hulpballon te verwerpen,
+maar ook het rechtermuisknopmenu van een los tabblad. Daarnaast
+kunt u ook geen venster meer samenvoegen met een ander door het
 tabblad te verslepen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
-        <translation>Bij één tabblad de tabbla&den verbergen</translation>
+        <translation>Tabbla&den verbergen als er slechts één tabblad is</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Tekst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Tekstbewerker</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
-        <translation>Regels standaard &omslaan</translation>
+        <translation>Regels &afbreken</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
-        <translation>Standaard automatisch &inspringen</translation>
+        <translation>Automatisch &inspringen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
-        <translation>Altijd regel&nummers tonen</translation>
+        <translation>Regel&nummers tonen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
-        <translation>S&yntax standaard markeren</translation>
+        <translation>S&yntaxis markeren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
-        <translation>D&onker thema</translation>
+        <translation>D&onker thema gebruiken</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Waarde van achtergrondkleur: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1811,23 +1836,23 @@
 the Run button, that appears on the toolbar/filemenu
 when needed, or by its shortcut Ctrl+E. Then, the
 process could be killed by Ctrl+Alt+E.</source>
-        <translation>Dit gaat alleen over uitvoerbare bestanden die geschreven
-zijn in scripttalen zoals Shell en Python.
+        <translation>Dit is alleen van toepassing op uitvoerbare bestanden die
+geschreven zijn in scripttalen als Shell en Python.
 
-Als dit wordt aangevinkt en het geopende bestand is
+Als dit wordt aangekruist en het geopende bestand is
 uitvoerbaar, dan wordt het bestand uitgevoerd na een klik
-op de knop Uitvoeren die verschijnt op de werkbalk/in het bestandsmenu
-indien nodig of via de sneltoets Ctrl+E. Het proces kan daarna worden
-afgebroken via Ctrl+Alt+E.</translation>
+op de knop ‘Uitvoeren’. Deze knop verschijnt op de werkbalk/
+in het bestandsmenu indien nodig, of kan worden geactiveerd met Ctrl+E.
+Het proces kan daarna worden afgebroken met Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Herstart FeatherPad om de instelling toe te passen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1840,33 +1865,33 @@
 255 betekent wit; 0 betekent zwart.
 
 Een lichte achtergrond ligt tussen de
-230 en 255; een donkere ligt tussen de
+230 en 255; een donkere tussen de
 0 en 50.
 
 Herstart FeatherPad om de wijziging toe te passen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Uitvoerbare scripts uitvoeren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
 
 Needs application restart to take effect.</source>
-        <translation>Het maximaal aantal recent bewerkte of geopende
+        <translation>Het maximaal aantal onlangs bewerkte of geopende
 bestanden dat FeatherPad toont. Standaard is dit
 10.
 
 Herstart FeatherPad om de wijziging toe te passen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1881,192 +1906,193 @@
 MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
-        <translation>Grootte van tekst op tabblad:</translation>
+        <translation>Tekstgrootte op tabblad:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> spaties</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
-        <translation>Dikke tekstcursor</translation>
+        <translation>Dikke tekstcursor gebruiken</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Moet het scrollen bewegingsloos zijn als de
 cursor zich in de tekstweergave bevindt?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Spellingcontrole</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
-        <translation>Een Hunspell-woordenboek draagt een naam die eindigt op '.dic'
+        <translation>Een Hunspell-woordenboek draagt een naam die eindigt op ‘.dic’
 en moet worden meegeleverd met een affix-bestand met dezelfde
-naam, maar eindigend op '.aff'.</translation>
+naam, maar eindigend op ‘.aff’.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
-        <translation>Hunspell-woordenboekpad:</translation>
+        <translation>Hunspell-woordenboeklocatie:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
-        <translation>Woordenboek toevoegen...</translation>
+        <translation>Woordenboek toevoegen…</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
-        <translation>Als je dit uitvinkt, dan wordt spellingcontrole
+        <translation>Als u dit uitschakelt, dan wordt spellingcontrole
 ingezet vanaf het begin van het document.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Spelling controleren vanaf cursorpositie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Aantal recente bestanden: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Alleen als het aantal niet hoger dan 50 is.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Alleen voor bestanden die bestaan en kunnen worden opgeslagen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
 This can be useful under certain circumstances,
 e.g. for changing the time stamp or removing the
 trailing spaces of a text file.</source>
-        <translation>Als dit wordt aangevinkt, dan kan de knop/het menu-item
-Opslaan ook worden gebruikt als het geopende bestand niet
+        <translation>Als dit wordt aangekruist, dan kan de knop/het menu-item
+‘Opslaan’ ook worden gebruikt als het geopende bestand niet
 bewerkt is.
 
-Dit kan handig zijn om bijv. de tijdstempel te wijzigen of de
+Dit kan bijv. handig zijn om de tijdstempel te wijzigen of
 achterliggende spaties te verwijderen uit een tekstbestand.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
-        <translation>Toestaan dat niet-bewerkte bestanden kunnen worden opgeslagen</translation>
+        <translation>Ook onbewerkte bestanden opslaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Toon in plaats daarvan een waarschuwing.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Openen van niet-tekstbestanden niet toestaan</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>Standaard worden bestanden na het kopiëren
+geopend als ze in FeatherPad worden geplakt.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Locaties plakken in plaats van bestanden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Sneltoetsen</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Actie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Sneltoets</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
-        <translation>Standaardsneltoetsen herstellen.</translation>
+        <translation>Herstel de standaard sneltoetsen.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
-        <translation>Standaard</translation>
+        <translation>Standaardwaarden</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
-        <translation type="unfinished"></translation>
+        <translation>Syntaxiskleuren</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
-        <translation type="unfinished"></translation>
+        <translation>Element</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Tekstkleur</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Kleurwaarde van witruimte:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Alleen van toepassing als regelnummers worden getoond.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Markeerwaarde huidige regel:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
-        <translation type="unfinished"></translation>
+        <translation>Herstel de standaard syntaxiskleuren.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Sluiten</translation>
     </message>
@@ -2074,158 +2100,159 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Druk in de bewerkmodus op een actietoets
+om een sneltoets te wissen.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
         <source>Double click a color to change it.</source>
-        <translation type="unfinished"></translation>
+        <translation>Dubbelklik op een kleur om deze te wijzigen.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>bestanden</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>bestand</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Waarschuwing: dubbelzinnige sneltoets gedetecteerd!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Functies, url's, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
-        <translation type="unfinished"></translation>
+        <translation>Ingebouwde functies</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
-        <translation type="unfinished"></translation>
+        <translation>Opmerkingen</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
-        <translation type="unfinished"></translation>
+        <translation>Citaten</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
-        <translation type="unfinished"></translation>
+        <translation>Soorten</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
-        <translation type="unfinished"></translation>
+        <translation>Trefwoorden</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
-        <translation type="unfinished"></translation>
+        <translation>Getallen</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Reguliere uitdrukkingen, codeblokken, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Documentklokken, xml-/html-elementen, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
-        <translation type="unfinished"></translation>
+        <translation>Markdown-koppen, css-waarden, …</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
-        <translation type="unfinished"></translation>
+        <translation>Aanvullende elementen</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
-        <translation>Herstart FeatherPad om de wijzigingen toe te passen.</translation>
+        <translation>Herstart FeatherPad om de wijziging(en) toe te passen.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
-        <translation>Herstart FeatherPad om de wijzigingen toe te passen.</translation>
+        <translation>Herstart FeatherPad om de wijziging(en) toe te passen.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
-        <translation>&Recent geopend</translation>
+        <translation>&Onlangs geopend</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
-        <translation>Recent &bewerkt</translation>
+        <translation>Onlangs &bewerkt</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
-        <translation>De ingevoerde sneltoets is gereserveerd.</translation>
+        <translation>De gekozen sneltoets is gereserveerd.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell-woordenboekbestanden (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
-        <translation type="unfinished"></translation>
+        <translation>Kies een syntaxiskleur</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
-        <translation>Zoeken...</translation>
+        <translation>Zoeken…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
-        <translation>Hoofdlettergebruik moet overeenkomen</translation>
+        <translation>Overeenkomstig met hoofdlettergebruik</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Geheel woord</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
-        <translation>Reguliere expressie</translation>
+        <translation>Reguliere uitdrukking</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
-        <translation>Zoeken met regex...</translation>
+        <translation>Zoeken met regex…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Volgende</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Vorige</translation>
     </message>
@@ -2251,7 +2278,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="56"/>
         <source>Filter...</source>
-        <translation>Filteren...</translation>
+        <translation>Filteren…</translation>
     </message>
     <message>
         <location filename="../../sessionDialog.ui" line="69"/>
@@ -2332,7 +2359,7 @@
     <message>
         <location filename="../../sessionDialog.ui" line="149"/>
         <source>Type a name to save session</source>
-        <translation>Voer een naam in voor de sessie</translation>
+        <translation>Geef de sessie een naam</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="179"/>
@@ -2357,30 +2384,30 @@
     <message>
         <location filename="../../session.cpp" line="333"/>
         <source>Do you really want to remove all saved sessions?</source>
-        <translation>Weet je zeker dat je alle opgeslagen sessie wilt verwijderen?</translation>
+        <translation>Weet je zeker dat je alle opgeslagen sessies wilt wissen?</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="339"/>
         <source>Do you really want to remove the selected sessions?</source>
-        <translation>Weet je zeker dat je de geselecteerde sessies wilt verwijderen?</translation>
+        <translation>Weet je zeker dat je de geselecteerde sessies wilt wissen?</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="341"/>
         <source>Do you really want to remove the selected session?</source>
-        <translation>Weet je zeker dat je de geselecteerde sessie wilt verwijderen?</translation>
+        <translation>Weet je zeker dat je de geselecteerde sessie wilt wissen?</translation>
     </message>
     <message>
         <location filename="../../session.cpp" line="346"/>
         <source>A session with the same name exists.<br>Do you want to overwrite it?</source>
-        <translation>Er bestaat al een sessie met deze naam.<br>Wil je deze overschrijven?</translation>
+        <translation>Er is al een sessie met deze naam.<br>Wil je deze overschrijven?</translation>
     </message>
 </context>
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
-        <translation>Filteren...</translation>
+        <translation>Filteren…</translation>
     </message>
 </context>
 <context>
@@ -2424,7 +2451,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Dubbelklik om de huidige regel te centreren</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_pl.ts featherpad-1.0.1/featherpad/data/translations/featherpad_pl.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_pl.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_pl.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licencja</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Bez tytułu</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Opcje</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kodowanie</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Zapisz</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Zastąpienie</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Zastąp wszystko</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Ostatnio otwie&rane</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Zamknij</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Zapisać zmiany?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Przejdź do tego okna lub zamknij jego dialog!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokument został zmodyfikowany.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Odrzuć zmiany</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Anuluj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nie dla wszystkich</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Niezapisane</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Wiersze</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Zaznaczone znaki</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Wyrazy</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Inny proces jest uruchomiony w tej karcie!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Plik skryptu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Inne okno FeatherPad wyświetliło dialogowe okno modalne!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Położenie:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normalne</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Plik nie istnieje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Otwórz odnośnik</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Kopiuj odnośnik</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Tylko jeden proces może być aktywny w karcie.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Wynik skryptu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Wyczyść</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad nie otworzy plików większych niż 500 MB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Nie udało się otworzyć niektórych plików!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Nie masz uprawnień pozwalających na odczyt pliku.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Plik(i) nie do edycji!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Pliki nietekstowe lub zawierające długie wiersze nie mogą być edytowane.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Wykryto wcześniejsze zatrzymanie aplikacji!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Zalecane jest zamknięcie wszystkich okien FeatherPad i ponowne uruchomienie programu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Główna instancja</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Wszystkie pliki (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Wszystkie pliki (*);;.Pliki %1 (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Otwórz plik…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>Pliki .%1 (*.%1);;Wszystkie pliki (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Zapisz jako…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Zachowaj kodowanie i zapisz jako…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Tak</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Nie</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Anuluj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Czy chcesz uźyć znaków końca wierszu systemu <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Może to poprawić czytelność pod MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Nie udało się zapisać!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Pomoc</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Składnia</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Nie można otwierać dużych plików!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Plik został zmodyfikowany z użyciem innego programu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Zachowaj ostrożność odświeżając lub zapisując ten plik!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Wydrukuj dokument</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 strony</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Kopiuj ścieżkę docelową</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Otwórz cel tutaj</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Musisz dodać słownik Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Patrz: Preferencje → Tekst → Sprawdzanie pisowni</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Słownik Hunspell nie istnieje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Brak błędów w pisowni w dokumencie.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Brak błędów w pisowni od kursora tekstu.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Sprawdzanie pisowni</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Niektóre pliki nie mogły zostać zapisane!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Tłumacze</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Lekki edytor tekstu niesformatowanego z zakładkami</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>oparty na Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>O FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Bez zamiennika</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Jeden zamiennik</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln zamiennik</numerusform>
@@ -1250,12 +1262,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Limit rozmiaru dla podświetlania składni został przekroczony.</translation>
     </message>
@@ -1263,13 +1275,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1436,63 +1448,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Ukryj domyślnie &pasek wyszukiwania</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Zawsze pokazuj pasek st&anu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Pokazuj położenie kursora na paski stanu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Zmiany będą widoczne po zamknięciu tego okna.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Położenie paska kart: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Góra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Dół</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Lewo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Prawo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1504,17 +1527,17 @@
 Nawigacja z użyciem myszy nie ulegnie zmianie.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Nawigacja po kartach powtarza się</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Zamykaj okno po zamknięciu ostatniej karty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1523,12 +1546,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Zawsze otwieraj w oddzielnych oknach</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1539,145 +1562,145 @@
 Niektóre środowiska, np. KDE i LXQt dostarczają własne okna dialogowe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Natywne okna dialogowe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Odznacz, aby korzystać z Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Zapamiętaj &czcionkę</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Obejmuje to nawiasy, klamry i cudzysłowie.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>Automatyczne &nawiasy</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Nigdy nie podświetlaj składni w plikach > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Dodaje to przycisk menu w pasku stanu
 pozwalający na zmianę składni.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Obsługuj zastępowanie składni</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Pokazuje spacje, tabulatory itp.
 jeżeli składnia jest podświetlana.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Wyróżniaj białe znaki</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Pionowa linia będzie wyświetlana tylko, jeżeli
 używasz czcionki o stałej szerokości znaków.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Wyświetlaj pionowe linie przy pozycji:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Pokazuj także koniec dokumentów i wierszy</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Format daty i godziny:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Niektóre edytory tekstu nie otworzą dokumentu
 jeżeli ostatni wiersz nie jest pusty.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Sprawdzaj obecność pustego wiersza podczas zapisywania</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Usuwaj spacje na końcu przy zapisywaniu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inercyjne przewijanie kółkiem myszy</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Pliki</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Zarządzanie plikami</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Uruchamiaj z plikami z ostatniej sesji</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1701,32 +1724,32 @@
 pokazane w okienku dialogowym.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Rozpocznij z komendą: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Komenda + argumenty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Pokazuj ostatnio mod&yfikowane pliki</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Pokazuj ostatnio ot&wierane pliki</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Zapisuj zmiany w otwieranych plikach co:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Pomoc</translation>
     </message>
@@ -1736,7 +1759,7 @@
         <translation>Uruchamiaj z panelem bocznym</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1746,57 +1769,57 @@
 okna do drugiego przeciągając kartę.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>Nie pokazuj poje&dynczej karty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Tekst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Edytor tekstu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Za&wijaj domyślnie wiersze</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Twórz automatyczn&ie wcięcia domyślnie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Zawsze &numeruj wiersze</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Podświetaj składnię dom&yślnie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Ciemny zestaw k&olorów</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Wartość koloru tła: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1814,13 +1837,13 @@
 Proces może zostać zakończony skrótem Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Wymaga ponownego otwarcia okna, aby uzyskać efekt.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1840,13 +1863,13 @@
 okna, aby efekt był widoczny.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Wykonaj skrypty wykonywalne</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1859,8 +1882,8 @@
 Restart jest wymagany, aby uzyskać efekt.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1875,84 +1898,84 @@
 MMM dd, rrrr, gg:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Rozmiar wcięć:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> spacje</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Grubszy wskaźnik tekstu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished">Sprawdzanie pisowni</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Liczba ostatnich plików: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Tylko jeśli ich liczba nie jest większa niż 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Tylko dla istniejących plików, które mogą zostać zapisane.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1967,96 +1990,96 @@
 na końcu pliku.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Pozwalaj na zapisywanie niezmodyfikowanych plików</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Wyświetlaj ostrzeżenie zamiast tego.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Nie pozwalaj na otwieranie plików nietekstowych</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Skróty</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Działanie</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Skrót</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Przywróć domyślne skróty.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Domyślne</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Zamknij</translation>
     </message>
@@ -2072,111 +2095,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>pliki</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>plik</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Ostrzeżenie: Wykryto niejednoznaczny skrót!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Restart aplikacji jest wymagany, aby uzyskać efekt.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Ponowne otwarcie okna jest wymagane, aby uzyskać efekt.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Ostatnio otwie&rane</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Ostatnio &modyfikowane</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Wprowadzony skrót został zarejestrowany.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2184,38 +2207,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Szukaj…</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Uwzględniaj wielkość znaków</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Cały wyraz</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Wyrażenie regularne</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Wyszukaj wyrażeniem regularnym...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Następne</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Poprzednie</translation>
     </message>
@@ -2368,7 +2391,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtruj…</translation>
     </message>
@@ -2414,7 +2437,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Naciśnij dwukrotnie, aby wyśrodkować obecny wiersz</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_pt_BR.ts featherpad-1.0.1/featherpad/data/translations/featherpad_pt_BR.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_pt_BR.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_pt_BR.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licença</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Sem título</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Opções</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Codificação</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Salvar</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Substituição</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Substituir todos</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Recentemente Aberto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Fechar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Salvar alterações?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Por favor, atenda essa janela ou apenas feche a caixa de diálogo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>O documento foi modificado.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Descartar alterações</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Não para todos</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Não salvo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Linhas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Sel. Caracteres</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Palavras</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Outro processo está sendo executado nesta aba!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Arquivo de Script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Outra janela do FeatherPad tem uma caixa de diálogo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Posição:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>O arquivo não existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Abrir Link</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Copiar Link</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Apenas um processo é permitido por aba.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Saída de Script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Limpar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>O FeatherPad não abre arquivos maiores que 100 MiB.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Arquivo(s) sem texto não foram abertos!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Veja em Preferências → Arquivos → Não permitir a abertura de arquivos que não forem de texto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Alguns arquivos não puderam ser abertos!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Você pode não ter permissão para ler.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Arquivos não editáveis!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Arquivos não-texto ou arquivos com linhas enormes não podem ser editados.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Um conflito anterior detectado!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>De preferência, feche todas as janelas do FeatherPad e inicie novamente!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instância Root</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Todos os Arquivos (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Todos os Arquivos (*);;.%1 Arquivos (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Abrir arquivo...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Arquivos (*.%1);;Todos os Arquivos (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Salvar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Manter codificação e salvar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Salvando como root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Aguardando autenticação...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" não foi encontrado. Por favor, instale o Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Sim</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Não</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Você quer usar fim de linha <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Isso pode ser bom para a legibilidade no MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Não pode ser salvo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Ajuda</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintaxe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Arquivo(s) enorme(s) não aberto!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>As tabulações de texto são convertidas em espaços.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>O texto selecionado era muito longo.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Não foi totalmente processado.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Este arquivo foi modificado em outro lugar ou de outro jeito!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Por favor, tenha cuidado ao recarregar ou salvar este documento!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Impressão em andamento...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Imprimir Documento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Impressão concluída.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Páginas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Copiar caminho de destino</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Abrir Destino Aqui</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Copiar caminho do alvo final</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Abra o alvo final aqui</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Abrir Pasta de Conteúdo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Você precisa adicionar um dicionário Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Veja Preferências → Texto → Verificação ortográfica!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>O dicionário Hunspell não existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>O dicionário Hunspell não está acompanhado por um arquivo de afixação.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Nenhum erro de ortografia no documento.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Nenhum erro ortográfico no cursor de texto.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Verificação ortográfica</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Alguns arquivos não puderam ser salvos!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Tradutores</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Um editor de texto simples, leve e com abas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>Baseado em Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Sobre FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Nenhuma substituição</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Uma substituição</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln substituição</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>As primeiras 1000 substituições são destacadas.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>O limite de tamanho para realce de sintaxe é excedido.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1435,64 +1447,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Os aceleradores da Barra de Menu são ativados pelo Alt
+e podem interferir com os atalhos personalizados.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Desativar aceleradores da barra de menu</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Ocultar &barra de pesquisa por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Por padrão, cada entrada de pesquisa
 tem um histórico de pesquisa separado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Usar um histórico de pesquisa compartilhada</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Sempre exibir barra de st&atus</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Exibir posição do cursor na barra de status</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Entrará em vigor após fechar este diálogo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Posição da aba: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Norte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Sul</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Oeste</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Leste</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1527,17 @@
 A navegação de abas com a roda do mouse não é afetada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>A navegação por &abas envolve</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Fechar janela ao fechar a última aba</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1550,12 @@
 relatar que possuem várias áreas de trabalho.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Sempre abrir janelas separadas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1542,32 +1566,32 @@
 Alguns ambientes de desktop, como o KDE e o LXQt, fornecem caixas de diálogo de arquivos.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Caixa de diálogo de arquivo nativo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Desmarque para Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Memorizar &fonte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Isso abrange parênteses, chaves, colchetes e citações.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Colchete automático</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1576,112 +1600,112 @@
 em circunstâncias apropriadas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Substituir períodos triplos e duplos hifens enquanto digita</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Destaque as correspondências com distinção entre
 maiúsculas e minúsculas e inteiras do texto selecionado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Destaque de seleção</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Nunca realce a sintaxe para arquivos > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Isso cria um botão de menu na
 barra de status para alterar a sintaxe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Suporte a substituição de sintaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Exibir espaços, tabulações e linhas de tabulação quando a sintaxe estiver realçada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Exibir espaços em branco</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>As linhas de posição vertical serão desenhadas somente se
 a fonte do editor tiver um passo fixo (como o Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Exibir linhas verticais iniciando nessa posição:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Também exibir fim de linha e documento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Formato de data e hora:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Alguns editores de texto não podem abrir um documento cuja última linha não esteja vazia.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Deixe a última linha vazia ao salvar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Remover espaços à direita ao salvar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Rolagem inercial com roda do mouse</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Arquivos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Gerenciamento de Arquivo</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Iniciar com arquivos da última janela</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1704,32 +1728,32 @@
 serão exibidas por um diálogo pop-up.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Iniciar com esse comando: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Comando + Argumentos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Exibir arquivos modificados recen&temente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Exibir arquivos abertos recente&mente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Salvar alterações em arquivos abertos a cada:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Ajuda</translation>
     </message>
@@ -1739,7 +1763,7 @@
         <translation>Iniciar com o modo de painel lateral</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1750,57 +1774,57 @@
 em outra, arrastando e soltando a aba.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Não exibir uma única aba</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Editor de Texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Quebra de linhas por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>&Indentação automática por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Sempre exibir &números de linha</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Realçar sinta&xe por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Esquema de c&or Dark</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Valor da cor de fundo: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1819,13 +1843,13 @@
 mesmo modo, o processo poderia ser morto por Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Necessário reabrir a janela para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1843,13 +1867,13 @@
 Necessário reabrir a janela para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Executar scripts executáveis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1862,8 +1886,8 @@
 Necessita de reinicialização do aplicativo para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1878,35 +1902,35 @@
 DD de MM de AAAA | hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tamanho da guia de texto:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> espaços</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Cursor de texto espesso</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>A rolagem do mouse deve ser inercial
 se o cursor estiver dentro da visualização de texto?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Verificação ortográfica</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1915,51 +1939,51 @@
 nome, mas terminando com ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Caminho do dicionário Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Adicionar dicionário...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Se isso estiver desmarcado, a verificação ortográfica
 será iniciado a partir do início do documento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Iniciar verificação ortográfica a partir do cursor de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Número de arquivos recentes: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Apenas se o seu número não for maior que 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Apenas para arquivos que existem e podem ser salvos.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1974,97 +1998,97 @@
 espaços à direita de um arquivo de texto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Permitir salvar arquivos não modificados</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Exibir um aviso em seu lugar.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Não permitir abertura de arquivos não-texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Por padrão, quando os arquivos são copiados,
 eles serão abertos se forem colados no FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Colar endereços em vez de arquivos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Atalhos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Ação</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Atalho</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Restaurar atalhos padrão.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Cores de Sintaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elemento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Cor do Texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Valor da cor do espaço em branco:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Tem efeito apenas se os números de linha estão sendo exibidos.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Valor de destaque da linha atual:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Restaurar o padrão de cores de sintaxe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Fechar</translation>
     </message>
@@ -2081,111 +2105,111 @@
         <translation>Dê um clique duplo em uma cor para mudá-la.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>arquivos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>arquivo</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Atenção: Atalho ambíguo detectado!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funções, URLs,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Funções Embutidas</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Comentários</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citações</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Palavras-chave</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Números</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Expressões Regulares, Blocos de Código,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Blocos de Documento, Elementos XML/HTML,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Cabeçalhos de Markdown, Valores CSS,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Elementos Extras</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>A reinicialização do aplicativo é necessária para que as alterações entrem em vigor.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>A reabertura da janela é necessária para que as alterações entrem em vigor.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Recentemente Aberto</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>Recentemente &Modificado</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>O atalho digitado foi reservado.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Arquivos de Dicionário Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Selecionar Cor de Sintaxe</translation>
     </message>
@@ -2193,38 +2217,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Pesquisar...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Caso de compatibilidade</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Palavra inteira</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Expressão Regular</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Pesquisar com regex...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Próximo</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Anterior</translation>
     </message>
@@ -2377,7 +2401,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtrar...</translation>
     </message>
@@ -2423,7 +2447,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Clique duas vezes para centralizar a linha atual</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_pt.ts featherpad-1.0.1/featherpad/data/translations/featherpad_pt.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_pt.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_pt.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licença</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Sem título</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>&Opções</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Codificação</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Guardar</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Substituição</translation>
     </message>
@@ -799,449 +799,461 @@
         <translation>Substituir tudo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>Abertos &recentemente</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Fechar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Guardar alterações?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Aceda à janela ou feche este diálogo!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>O documento foi modificado.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Rejeitar alterações</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Não a tudo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Não guardado</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Linhas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Caracteres selecionados</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Palavras</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Já está a ser executado um processo neste separador!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Ficheiro script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Já existe uma janela do featherpad com um diálogo modal!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Posição:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Normal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>O ficheiro não existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Abrir ligação</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Copiar ligação</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Apenas é permitido um processo por separador.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Destino do script</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Limpar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>Não é possível abrir ficheiros com tamanho superior a 100 Mib.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Ficheiro(s) não textual(ais) não aberto(s)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Ver Preferências → Ficheiros → Não permitir a abertura de ficheiros que não sejam de texto</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Não foi possível abrir alguns ficheiros!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Pode ser que você não tenha permissão de leitura.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>O(s) ficheiro (s) não podem ser editados!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Ficheiros que não sejam de texto ou que tenham linhas enormes não podem ser editados.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Ocorreu um erro!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Preferencialmente, feche todas as janelas e reinicie a aplicação!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Instância root</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Todos os ficheiros (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Todos os ficheiros (*);; Ficheiros .%1 (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Abrir ficheiro...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>Ficheiros .%1 (*.%1);; Todos os ficheiros (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Guardar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Manter codificação e guardar como...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Guardar como root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>À espera de autenticação...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" não foi encontrado. Instale o Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Sim</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Não</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Cancelar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Deseja utilizar o fim de linhas ao estilo <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Esta opção é a correta para ler ficheiros em sistemas Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Não pode ser guardado!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Ajuda</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sintaxe</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>O(s) ficheiro(s) muito grandes não conseguem ser abertos!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Os separadores de texto são convertidas em espaços.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>O texto selecionado era muito comprido.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Não foi totalmente processado.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Este ficheiro foi modificado em outro lugar ou de outra maneira!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Tenha muito cuidado a recarregar ou guardar este documento!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Impressão em andamento...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Imprimir documento</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>Impressão concluída.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Páginas</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Copiar caminho do destino</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Abrir destino aqui</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Copiar caminho de destino final</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Abra o alvo final aqui</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Abrir pasta de conteúdo</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Tem que adicionar um dicionário Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Consulte Preferências → Texto → Verificação ortográfica!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>O dicionário Hunspell não existe.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>O dicionário Hunspell não está acompanhado por um ficheiro 'affix'.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Não existem erros ortográficos.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Nenhum erro ortográfico a partir do cursor de texto.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Verificação ortográfica</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Não foi possível guardar todos os ficheiros!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Tradutores</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Um editor de ficheiros poderoso</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>baseado em Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Autor</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>Acerca de Featherpad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Sem substituição</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Uma substituição</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln substituição</numerusform>
@@ -1249,12 +1261,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>As primeiras 1000 substituições são destacadas.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Excedeu o limite de tamanho para o destaque de sintaxe.</translation>
     </message>
@@ -1262,13 +1274,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1435,64 +1447,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Os aceleradores da Barra de menu são ativados pelo Alt
+e podem interferir com os atalhos personalizados.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Desativar aceleradores da barra de menu</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>Por definição, ocultar &barra de pesquisa</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Por definição, cada entrada pesquisada
 tem um histórico de pesquisa distinto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Utilizar histórico de pesquisa partilhado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>Mostr&ar sempre a barra de estado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Mostrar posição do cursor na barra de estado</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>A alteração será aplicada depois de fechar este diálogo.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Posição do separador: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Norte</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Sul</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Oeste</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Este</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1503,17 +1527,17 @@
 A navegação de separadores com a roda do rato não é afetada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>A navegação por &separadores envolve</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Fechar janela ao fechar o último separador</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1526,12 +1550,12 @@
 relatar que possuem várias áreas de trabalho.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Abrir sempre em janelas distintas</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1542,32 +1566,32 @@
 Alguns ambientes de trabalho, como o KDE e o LXQt, fornecem caixas de diálogo de ficheiros.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Caixa de diálogo nativa</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Desmarque para usar letra mono-espaçada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>Memori&zar tipo de letra</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Abrange parênteses, chaves, chavetas e aspas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Parênteses automático</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1576,114 +1600,114 @@
 sob circunstâncias adequadas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Substitua pontos triplos e hifens duplos ao escrever</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Destaque maiúsculas e minúsculas e todas as correspondências
 do texto selecionado.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Destaque de seleção</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Não destacar sintaxe para ficheiros > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Isto cria um botão de menu na barra
 de estado para alterar a sintaxe.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Suportar substituição de sintaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Mostrar espaços, separadores e linhas de
 separadores quando a sintaxe é realçada.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Mostrar espaços vazios</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>As linhas de posição vertical só serão desenhadas se
 a fonte do editor tem um tom fixo (como Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Mostrar linhas verticais com início nesta posição:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Também mostra as extremidades da linha e do documento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Formato de data e hora:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Alguns editores de texto não conseguem abrir
 um ficheiro se não existir uma linha vazia no fim.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Certifique-se de que deixa uma linha vazia</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Remover espaços à direita ao guardar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Inercial com roda do rato</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Ficheiros</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Gestão de ficheiros</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Iniciar com os ficheiros da última janela</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1706,32 +1730,32 @@
 serão apresentadas por uma janela.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Iniciar com este comando: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Comando + argumentos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Mostrar ficheiros modificados &recentemente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Mostrar ficheiros abertos &recentemente</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Guardar alterações a cada:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Ajuda</translation>
     </message>
@@ -1741,7 +1765,7 @@
         <translation>Iniciar com o modo de painel lateral</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1752,57 +1776,57 @@
 em outro, arrastando e soltando o separador.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>Ocultar separa&dor se apenas existir um aberto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Editor de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Quebrar linhas por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Avanço automát&ico por padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Mostrar sempre o &número da linha</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Por definição, destacar s&intaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Esquema escur&o</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Valor da cor de fundo: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MiB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1821,13 +1845,13 @@
 mesmo modo, o processo poderia ser terminado por Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Precisa reabrir a janela para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1845,13 +1869,13 @@
 Necessário reabrir a janela para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Executar scripts executáveis</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1864,8 +1888,8 @@
 Necessita de reiniciar a aplicação para entrar em vigor.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1880,35 +1904,35 @@
 dd, MMM, aaaa, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Tamanho da guia de texto:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> espaços</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Cursor de texto espesso</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>A roda do rato deve ser inercial
 se o cursor estiver dentro da visualização de texto?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Verificação Ortográfica</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1917,51 +1941,51 @@
 nome, mas terminando com ".aff".</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Diretório do dicionário Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Adicionar um dicionário...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Caso estiver desmarcado, a verificação ortográfica
 será iniciada a partir do início do documento.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Iniciar verificação ortográfica a partir do cursor de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Número de ficheiros recentes: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Apenas se o seu número não for superior a 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Apenas para ficheiros que existem e que podem ser guardados.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> min</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1976,97 +2000,97 @@
 espaços à direita de um ficheiro de texto.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Permitir guardar ficheiros não modificados</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Mostrar antes um aviso.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Não permitir a abertura de arquivos que não sejam de texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Por padrão, quando os ficheiros são copiados,
 eles serão abertos se forem colados no FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Colar endereços em vez de ficheiros</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Atalhos</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Ação</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Atalho</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Restaurar atalhos padrão.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Padrão</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Cores de sintaxe</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Elemento</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Cor do texto</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Valor da cor do espaço em branco:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Tem efeito apenas se os números de linha forem mostrados.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Valor de destaque da linha atual:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Restaurar as cores de sintaxe predefinidas.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Fechar</translation>
     </message>
@@ -2083,111 +2107,111 @@
         <translation>Faça duplo clique numa cor para a alterar.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>ficheiros</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>ficheiro</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Aviso: detetado um atalho ambíguo!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Funcões, URLs,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Funções integradas</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Comentários</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Citações</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Tipos</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Palavras chave</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Números</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Expressões regulares, Blocos de código,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Blocos de documento, Elementos XML/HTML,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Cabeçalhos de Markdown, Valores CSS,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Elementos extra</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Tem que reiniciar a aplicação para aplicar as alterações.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Tem que reabrir esta janela para aplicar as alterações.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>Abertos &recentemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>&Modificados recentemente</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>O atalho introduzido já está reservado.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Arquivos do Dicionário Hunspell (* .dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Selecione a cor da sintaxe</translation>
     </message>
@@ -2195,38 +2219,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Pesquisa...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Diferenciar maiúsculas/minúsculas</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Palavra inteira</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Expressão regular</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Pesquisar com regex...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Seguinte</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Anterior</translation>
     </message>
@@ -2379,7 +2403,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Filtrar...</translation>
     </message>
@@ -2425,7 +2449,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Duplo clique para centrar a linha atual</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_ru.ts featherpad-1.0.1/featherpad/data/translations/featherpad_ru.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_ru.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_ru.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Лицензия</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Безымянный</translation>
     </message>
@@ -71,9 +71,9 @@
         <translation>&Параметры</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Кодировка</translation>
     </message>
@@ -90,9 +90,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Замена</translation>
     </message>
@@ -148,7 +148,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Сохранить</translation>
     </message>
@@ -524,7 +524,7 @@
         <location filename="../../fp.ui" line="1157"/>
         <location filename="../../fp.ui" line="1160"/>
         <source>To Start Case</source>
-        <translation type="unfinished"></translation>
+        <translation>Начать случай</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="1168"/>
@@ -574,7 +574,7 @@
     <message>
         <location filename="../../fp.ui" line="1219"/>
         <source>Text Tabs to Spaces</source>
-        <translation type="unfinished"></translation>
+        <translation>Табуляции перевести в пробелы</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="994"/>
@@ -799,449 +799,461 @@
         <translation>Заменить всё</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Недавно открытые</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Положение:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>Нормальный</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Зайдите в это окно или просто закройте его диалог!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Файл не существует.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Отклонить изменения</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>О&тменить</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Не ко всем</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Несохранённый</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Выделенные символы</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Открыть ссылку</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Копировать ссылку</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>В этой вкладке запущен ещё один процесс!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>На одну вкладку допускается только один процесс.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Вывод сценария</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Очистить</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Большой файл не был открыт!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad не открывает файлы размером более 100 МиБ.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Файлы, отличные от текстовых не могут быть открыты!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>См. Настройки → Файл → Запретить открытие файлов, отличных от текстовых</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Некоторые файлы не могут быть открыты!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Возможно, недостаточно прав для доступа.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Недоступный(-ые) для редактирования файл(-ы)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Файлы, отличные от текстовых, а также с очень длинными строками, недоступны для редактирования.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Обнаружен предыдущий сбой!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Лучше закрыть все окна FeatherPad и запустить программу снова!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Запущено от имени администратора</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Все файлы (*);;.%1-файлы (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Открыть файл...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Сохранить как...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
-        <translation type="unfinished"></translation>
+        <translation>Сохранить как root.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
-        <translation type="unfinished"></translation>
+        <translation>Ожидание аутентификации ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
-        <translation type="unfinished"></translation>
+        <translation>"pkexec" не найден. Пожалуйста, установите Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Да</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Нет</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Отмена</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
-        <translation type="unfinished"></translation>
+        <translation>Табуляции переведены в пробелы.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
-        <translation type="unfinished"></translation>
+        <translation>Выбранный текст слишком большой.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Он не полностью переработан.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Файл был изменён внешней программой!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Будьте осторожны при перезагрузке или сохранении этого документа!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
-        <translation type="unfinished"></translation>
+        <translation>Идет печать ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Печать завершена.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 страниц</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Копировать целевой путь</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Открыть цель здесь</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Копировать путь цели назначения</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Открыть цель назначения здесь</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
-        <translation type="unfinished"></translation>
+        <translation>Открыть содержащую папку</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Вам нужно добавить словарь Hunspell.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>См. Настройки → Текст → Проверка орфографии!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Словарь Hunspell не найден.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Словарь Hunspell не сопровождается файлом аффикса.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>В документе нет орфографических ошибок.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Нет текста для поверки орфографии от курсора.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Проверка орфографии</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Файлы не могут быть сохранены!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Переводчики</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>Легковесный текстовый редактор со вкладками</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>основан на Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Автор</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation>aka.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Справка</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Строки</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Другое окно FeatherPad имеет модальный диалог!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Сохранить изменения?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Документ был изменён.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Слова</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Файл сценария</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Файлы (*.%1);;Все файлы (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Оставить кодировку и сохранить как...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>Хотите использовать конец строки <b>MS Windows</b>?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>Это может быть полезно для удобства чтения под MS Windows.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Не удаётся сохранить!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Синтаксис</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Печать документа</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>О FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Без замены</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Одна замена</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln замена</numerusform>
@@ -1250,12 +1262,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
-        <translation type="unfinished"></translation>
+        <translation>Выделены первые 1000 замен.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Превышен предельный размер для подсветки синтаксиса.</translation>
     </message>
@@ -1263,13 +1275,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Ctrl+H</translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation>Alt+.</translation>
@@ -1420,55 +1432,55 @@
 появится на панели инструментов.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>По умолчанию каждая поисковая
 запись имеет отдельную историю поиска.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Использовать общую историю поиска</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Показ позиции курсора в строке состояния</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Вступит в силу после закрытия этого диалогового окна.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Положение вкладок: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Север</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Юг</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Запад</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Восток</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1480,12 +1492,12 @@
 На навигацию колёсиком мыши не повлияет.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>Закрывать окно при закрытии последней вкладки</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1499,12 +1511,12 @@
 стола эта функция не работает.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>Всегда открывать в новом окне</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1515,27 +1527,27 @@
 Некоторые окружения, такие как KDE и LXQt предоставляют собственные диалоги.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Системный диалог выбора файла</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Снимите флажок для Monospace.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Это касается круглых, фигурных, квадратных скобок и кавычек.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Автоматическое закрытие скобок</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1544,48 +1556,49 @@
 в нужном контексте.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Заменять три точки и два дефиса при вводе текста</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
-        <translation type="unfinished"></translation>
+        <translation>Выделение совпадений с учетом регистра и целых совпадений
+выделенного текста.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
-        <translation type="unfinished"></translation>
+        <translation>Выделение выделений</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Действие создаст кнопку меню в строке
 состояния для изменения синтаксиса.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>Поддержка установки синтаксиса</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Показать пробелы, вкладки и строки
 вкладок, при выделенном синтаксисе.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Показ пробелов</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Вертикальные полосы будут нарисованы только
@@ -1593,65 +1606,77 @@
 фиксированную высоту (например, Monospace).</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>Показ вертикальных полос начиная с позиции:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>Показ строки в конце документа</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Ускорители панели меню активируются с помощью Alt
+и могут конфликтовать с настраиваемыми ярлыками.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Отключить ускорители панели меню</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Формат даты и времени:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Размер шрифта:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> пробела (-ов)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Не все текстовые редакторы смогут открыть
 документ, последняя строка в котором не пуста.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>При сохранении проверять, что последняя срока остаётся пустой</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Удалять завершающие пробелы при сохранении</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Широкий курсор текста</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Инерционная прокрутка колёсиком мыши</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Проверка орфографии</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1660,46 +1685,46 @@
 именем, но оканчивающимся на «.aff».</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Путь к словарю Hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Добавить словарь...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Если этот флажок снят, проверка
 орфографии начнётся с начала документа.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Начинать проверку орфографии от курсора</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>Файл</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Управление файлами</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>Начинать с файлов последнего окна</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1722,28 +1747,28 @@
 во всплывающем диалоговом окне.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Запуск с этой команды: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Команда + Аргументы</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Только для тех файлов, которые существуют и могут быть сохранены.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> мин</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1757,96 +1782,97 @@
 например для изменения отметки времени или удаления пробелов.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>Разрешить сохранение неизменённых файлов</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Показывать предупреждение.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Запретить открытие файлов, отличных от текстовых</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
-        <translation type="unfinished"></translation>
+        <translation>По умолчанию при копировании файлов они будут
+открываться, если они вставлены в FeatherPad.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
-        <translation type="unfinished"></translation>
+        <translation>Вставте пути вместо файлов</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>Комбинации клавиш</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>Действие</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Комбинация клавиш</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Восстановить комбинации клавиш по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>По умолчанию</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Цвета синтаксиса</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Элемент</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Цвет текста</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Значение цвета пробелов:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
-        <translation type="unfinished"></translation>
+        <translation>Действует только при отображении номеров строк.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
-        <translation type="unfinished"></translation>
+        <translation>Текущие выделение в строки:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Восстановить цвета синтаксиса по умолчанию.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Справка</translation>
     </message>
@@ -1871,22 +1897,22 @@
         <translation>Скрыть &панель меню</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="218"/>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>&Скрыть панель поиска по умолчанию</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>&Всегда показывать строку состояния</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>&Повторить навигацию по вкладкам</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1897,42 +1923,42 @@
 с помощью перетаскивания вкладки.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Не показывать единственную вкладку</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>Текст</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Текстовый редактор</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>&Запомнить шрифт</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>&Выделять строки по умолчанию</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Значение цвета фона: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> МиБ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1951,13 +1977,13 @@
 Затем процесс можно завершить нажатием Ctrl+Alt+E.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Требуется ещё раз открыть окно.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1976,13 +2002,13 @@
 Требуется ещё раз открыть окно.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>Запускать исполняемые сценарии</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1995,33 +2021,33 @@
 Требуется перезапуск приложения.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>&Автоматический отступ по умолчанию</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>&Всегда показывать номера строк</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>&Выделять синтаксис по умолчанию</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>Не выделять синтаксис для файлов > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>&Тёмная цветовая схема</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -2036,39 +2062,39 @@
 МММ дд, гггг, чч:мм:сс</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>Должна ли прокрутка колёсика мыши быть инерционной,
 при расположении курсора внутри текстового поля?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Количество последних файлов: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>&Показывать недавно изменённые файлы</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>&Показывать недавно открытые файлы</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Только если их число не более 50.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Интервал автосохранения открытых файлов:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Закрыть</translation>
     </message>
@@ -2076,7 +2102,8 @@
         <location filename="../../pref.cpp" line="104"/>
         <source>Press a modifier key to clear a shortcut
 in the editing mode.</source>
-        <translation type="unfinished"></translation>
+        <translation>Используйте клавишу-модификатор, чтобы очистить
+комбинацию клавиш в режиме редактирования.</translation>
     </message>
     <message>
         <location filename="../../pref.cpp" line="110"/>
@@ -2084,111 +2111,111 @@
         <translation>Дважды щёлкните по цвету для его изменения.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>файлы</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>файл</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Внимание: обнаружена неоднозначная комбинация!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>Функции, URLs,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Встроенные функции</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Комментарии</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Цитаты</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Типы</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Ключевые слова</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Числа</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Регулярные выражения, блоки кода,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Блоки документов, элементы XML/HTML,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Заголовки Headings, CSS Значения,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Дополнительные элементы</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Для вступления изменений в силу, необходим перезапуск приложения.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Для вступления изменений в силу, требуется повторное открытие окна.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Недавно открытые</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>&Недавно изменённые</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Введённая комбинация клавиш уже используется.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Файлы словаря Hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Выбор цвета синтаксиса</translation>
     </message>
@@ -2196,38 +2223,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Поиск...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>С учётом регистра</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Слово целиком</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Регулярное выражение</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>Искать с помощью регулярных выражений...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Следующий</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Предыдущий</translation>
     </message>
@@ -2380,7 +2407,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Фильтр...</translation>
     </message>
@@ -2426,7 +2453,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Двойной щелчок по центру текущей строки</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_si.ts featherpad-1.0.1/featherpad/data/translations/featherpad_si.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_si.ts	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_si.ts	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,2387 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="si">
+<context>
+    <name>FeatherPad::AboutDialog</name>
+    <message>
+        <location filename="../../about.ui" line="167"/>
+        <source>License</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FPwin</name>
+    <message>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
+        <location filename="../../fpwin.cpp" line="2077"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
+        <source>Untitled</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="71"/>
+        <source>Go to line:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="107"/>
+        <source>Select text from cursor to this line
+(Ctrl+Shift+J)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="111"/>
+        <source>Select Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="114"/>
+        <source>Ctrl+Shift+J</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="149"/>
+        <source>&File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="189"/>
+        <location filename="../../fp.ui" line="980"/>
+        <source>&Edit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="219"/>
+        <source>&Options</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
+        <source>Encoding</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="282"/>
+        <source>&Search</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="290"/>
+        <location filename="../../fp.ui" line="746"/>
+        <source>&Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="390"/>
+        <source>Find:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="406"/>
+        <source>To be replaced</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="419"/>
+        <source>Replace with:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="435"/>
+        <source>Replacing text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="494"/>
+        <source>&New</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="497"/>
+        <source>New tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="500"/>
+        <source>Ctrl+N</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="505"/>
+        <source>&Open</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="508"/>
+        <source>Open a file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="511"/>
+        <source>Ctrl+O</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="519"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
+        <source>&Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="522"/>
+        <source>Save the current tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="525"/>
+        <source>Ctrl+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="533"/>
+        <source>&Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="536"/>
+        <source>Undo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="539"/>
+        <source>Ctrl+Z</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="547"/>
+        <source>&Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="550"/>
+        <source>Redo</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="553"/>
+        <source>Ctrl+Shift+Z</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="561"/>
+        <location filename="../../fp.ui" line="564"/>
+        <source>Reload</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="567"/>
+        <source>Ctrl+Shift+R</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="572"/>
+        <source>&Find</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="578"/>
+        <source>Ctrl+F</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="586"/>
+        <source>Show/hide replacement dock</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="589"/>
+        <source>Ctrl+R</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="594"/>
+        <source>Save &As</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="597"/>
+        <source>Ctrl+Shift+S</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="602"/>
+        <source>&Print</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="605"/>
+        <source>Ctrl+P</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="610"/>
+        <source>Documen&t Properties</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="613"/>
+        <source>Ctrl+Shift+D</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="618"/>
+        <source>&Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="621"/>
+        <source>Ctrl+Shift+Q</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="626"/>
+        <source>&Quit</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="629"/>
+        <source>Ctrl+Q</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="637"/>
+        <source>&Cut</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="640"/>
+        <source>Ctrl+X</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="648"/>
+        <source>C&opy</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="651"/>
+        <source>Ctrl+C</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="656"/>
+        <source>&Paste</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="659"/>
+        <source>Ctrl+V</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="667"/>
+        <source>&Delete</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="672"/>
+        <source>&Select All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="675"/>
+        <source>Ctrl+A</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="680"/>
+        <source>&Font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="688"/>
+        <source>&Line Numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="691"/>
+        <source>Ctrl+L</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="702"/>
+        <source>&Wrap Lines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="705"/>
+        <source>Ctrl+W</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="716"/>
+        <source>&Auto-Indentation</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="719"/>
+        <source>Ctrl+I</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="730"/>
+        <source>&Syntax Highlighting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="733"/>
+        <source>Ctrl+Shift+H</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="738"/>
+        <source>&Preferences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="741"/>
+        <source>Ctrl+Shift+P</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="749"/>
+        <source>Ctrl+H</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="754"/>
+        <source>&About</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="781"/>
+        <source>Enforce UTF-8</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="964"/>
+        <source>Save with &Encoding</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="969"/>
+        <source>&Jump to</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="972"/>
+        <source>Show/hide jump bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="975"/>
+        <source>Ctrl+J</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="983"/>
+        <source>Edit text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="986"/>
+        <source>Ctrl+Shift+E</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1089"/>
+        <source>&Run</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1095"/>
+        <source>Ctrl+E</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1100"/>
+        <source>&Clear</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1103"/>
+        <source>Clear the list of recently modified files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1108"/>
+        <source>Save/Restore Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1111"/>
+        <source>Sa&ve/Restore Session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1114"/>
+        <source>Ctrl+M</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1119"/>
+        <source>Side-Pane</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1122"/>
+        <source>Ctrl+Alt+P</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1127"/>
+        <source>Paste Date and Time</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1130"/>
+        <source>Ctrl+Shift+V</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1135"/>
+        <location filename="../../fp.ui" line="1138"/>
+        <source>To Upper Case</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1141"/>
+        <source>Ctrl+Shift+U</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1146"/>
+        <location filename="../../fp.ui" line="1149"/>
+        <source>To Lower Case</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1152"/>
+        <source>Ctrl+Shift+L</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1157"/>
+        <location filename="../../fp.ui" line="1160"/>
+        <source>To Start Case</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1168"/>
+        <location filename="../../fp.ui" line="1171"/>
+        <source>Last Active Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1174"/>
+        <source>F1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1179"/>
+        <location filename="../../fp.ui" line="1182"/>
+        <source>Sort Lines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1187"/>
+        <location filename="../../fp.ui" line="1190"/>
+        <source>Sort Lines Reversely</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1195"/>
+        <source>Check Spelling</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1198"/>
+        <source>F2</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1203"/>
+        <location filename="../../fp.ui" line="1206"/>
+        <source>Save All Files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1211"/>
+        <location filename="../../fp.ui" line="1214"/>
+        <source>User Dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1219"/>
+        <source>Text Tabs to Spaces</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="994"/>
+        <source>&Detach Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="997"/>
+        <source>Ctrl+T</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1010"/>
+        <source>Close Ne&xt Tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1015"/>
+        <source>Close &Previous Tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1043"/>
+        <source>Ne&xt Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1054"/>
+        <source>Previous Ta&b</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1092"/>
+        <source>Execute</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1020"/>
+        <source>Close &All Tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="153"/>
+        <source>Recently &Modified</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="223"/>
+        <source>&Encoding</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="227"/>
+        <source>&Unicode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="234"/>
+        <source>&Western European</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="242"/>
+        <source>&East European</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="250"/>
+        <source>Ea&st Asian</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="342"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
+        <source>Replacement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="575"/>
+        <source>Focus/hide search bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="583"/>
+        <source>&Replace</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="765"/>
+        <source>Windows Arabic (&CP1256)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="773"/>
+        <source>&Other</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="792"/>
+        <source>&UTF-8</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="803"/>
+        <source>UTF-&16</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="814"/>
+        <source>&ISO-8859-1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="825"/>
+        <source>&Windows-1252</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="836"/>
+        <source>&Cyrillic (CP1251)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="847"/>
+        <source>Cyrillic (&KOI8-U)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="858"/>
+        <source>Cyrillic (&ISO-8859-5)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="869"/>
+        <source>&Chinese (BIG5)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="880"/>
+        <source>Chinese (&GB18030)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="891"/>
+        <source>&Japanese (ISO-2022-JP)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="902"/>
+        <source>Japanese (&ISO-2022-JP-2)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="913"/>
+        <source>Japanese (ISO-&2022-KR)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="924"/>
+        <source>Ja&panese (CP932)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="935"/>
+        <source>Japa&nese (EUC-JP)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="943"/>
+        <source>&Korean (CP949)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="951"/>
+        <source>K&orean (CP1361)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="959"/>
+        <source>Korean (&EUC-KR)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1005"/>
+        <source>ISO-&8859-15</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1025"/>
+        <source>Close &Other Tabs</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1030"/>
+        <source>&Copy File Name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1035"/>
+        <source>Copy File &Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1046"/>
+        <source>Alt+Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1057"/>
+        <source>Alt+Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1065"/>
+        <source>&First Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1068"/>
+        <source>Alt+Down</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1076"/>
+        <source>&Last Tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1079"/>
+        <source>Alt+Up</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1084"/>
+        <source>Menu</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="97"/>
+        <source>Calculate number of words
+(For huge texts, this may be CPU-intensive.)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="112"/>
+        <source>Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="113"/>
+        <source>Previous</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="114"/>
+        <source>Replace all</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="593"/>
+        <source>&Recently Opened</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1917"/>
+        <source>Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1242"/>
+        <source>Save changes?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="894"/>
+        <source>Please attend to that window or just close its dialog!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1246"/>
+        <source>The document has been modified.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1257"/>
+        <source>&Discard changes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1258"/>
+        <source>&Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1260"/>
+        <source>&No to all</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
+        <source>Unsaved</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
+        <source>Lines</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
+        <source>Sel. Chars</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
+        <source>Words</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1800"/>
+        <source>Another process is running in this tab!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1908"/>
+        <source>Script File</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="893"/>
+        <source>Another FeatherPad window has a modal dialog!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
+        <source>Position:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
+        <source>Normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
+        <source>The file does not exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1613"/>
+        <source>Open Link</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1626"/>
+        <source>Copy Link</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1801"/>
+        <source>Only one process is allowed per tab.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1904"/>
+        <source>Script Output</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1920"/>
+        <source>Clear</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2546"/>
+        <source>FeatherPad does not open files larger than 100 MiB.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2554"/>
+        <source>Non-text file(s) not opened!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2555"/>
+        <source>See Preferences → Files → Do not permit opening of non-text files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2564"/>
+        <source>Some file(s) could not be opened!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2565"/>
+        <source>You may not have the permission to read.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2575"/>
+        <source>Uneditable file(s)!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2576"/>
+        <source>Non-text files or files with huge lines cannot be edited.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2640"/>
+        <source>A previous crash detected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2641"/>
+        <source>Preferably, close all FeatherPad windows and start again!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2649"/>
+        <source>Root Instance</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
+        <source>All Files (*)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2726"/>
+        <source>All Files (*);;.%1 Files (*.%1)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2730"/>
+        <source>Open file...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2900"/>
+        <source>.%1 Files (*.%1);;All Files (*)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
+        <source>Save as...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3025"/>
+        <source>Keep encoding and save as...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3297"/>
+        <source>Saving as root.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3298"/>
+        <source>Waiting for authentication...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3418"/>
+        <source>"pkexec" is not found. Please install Polkit!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3106"/>
+        <source>Yes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3107"/>
+        <source>No</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3108"/>
+        <source>Cancel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3109"/>
+        <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3110"/>
+        <source>This may be good for readability under MS Windows.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
+        <source>Cannot be saved!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
+        <source>Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
+        <source>Syntax</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2545"/>
+        <source>Huge file(s) not opened!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3573"/>
+        <source>Text tabs are converted to spaces.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3675"/>
+        <source>The selected text was too long.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3676"/>
+        <source>It is not fully processed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
+        <source>This file has been modified elsewhere or in another way!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
+        <source>Please be careful about reloading or saving this document!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4484"/>
+        <source>Printing in progress...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4535"/>
+        <source>Print Document</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4541"/>
+        <source>Printing completed.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
+        <source>%1 Pages</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
+        <source>Copy Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
+        <source>Open Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
+        <source>Open Containing Folder</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5495"/>
+        <source>You need to add a Hunspell dictionary.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
+        <source>See Preferences → Text → Spell Checking!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5502"/>
+        <source>The Hunspell dictionary does not exist.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5512"/>
+        <source>The Hunspell dictionary is not accompanied by an affix file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
+        <source>No misspelling in document.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
+        <source>No misspelling from text cursor.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5586"/>
+        <source>Spell Checking</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5923"/>
+        <source>Some files cannot be saved!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <source>Translators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5966"/>
+        <source>A lightweight, tabbed, plain-text editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5967"/>
+        <source>based on Qt</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5968"/>
+        <source>Author</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5969"/>
+        <source>aka.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
+        <source>About FeatherPad</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="242"/>
+        <source>No Replacement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="244"/>
+        <source>One Replacement</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../../replace.cpp" line="246"/>
+        <source>%Ln Replacements</source>
+        <translation type="unfinished">
+            <numerusform></numerusform>
+            <numerusform></numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="250"/>
+        <source>The first 1000 replacements are highlighted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../syntax.cpp" line="298"/>
+        <source>The size limit for syntax highlighting is exceeded.</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FileDialog</name>
+    <message>
+        <location filename="../../filedialog.h" line="49"/>
+        <source>Ctrl+H</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../filedialog.h" line="50"/>
+        <source>Alt+.</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FontDialog</name>
+    <message>
+        <location filename="../../fontDialog.ui" line="14"/>
+        <source>Select Font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="38"/>
+        <source>Programming Fonts</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="45"/>
+        <location filename="../../fontDialog.ui" line="55"/>
+        <source>Font:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="69"/>
+        <source>Size:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="89"/>
+        <source>Weight:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="103"/>
+        <source>Normal</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="108"/>
+        <source>Medium</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="113"/>
+        <source>Bold</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="118"/>
+        <source>Black</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="126"/>
+        <source>Italic</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="149"/>
+        <source>Preview</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::LineEdit</name>
+    <message>
+        <location filename="../../lineedit.cpp" line="34"/>
+        <source>Clear text (Ctrl+K)</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::PrefDialog</name>
+    <message>
+        <location filename="../../prefDialog.ui" line="14"/>
+        <source>Preferences</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="30"/>
+        <source>Window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="69"/>
+        <source>Window Settings</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="75"/>
+        <source>Remember window &size on closing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="84"/>
+        <location filename="../../prefDialog.ui" line="97"/>
+        <location filename="../../prefDialog.ui" line="107"/>
+        <location filename="../../prefDialog.ui" line="120"/>
+        <source>Window frame is excluded.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="87"/>
+        <source>Start with this size: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="100"/>
+        <location filename="../../prefDialog.ui" line="123"/>
+        <source> px</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="110"/>
+        <source>×</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="148"/>
+        <source>Enforcing a window position is not recommended
+and may not work with some window managers.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="152"/>
+        <source>Remember window &position on closing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="159"/>
+        <source>Most suitable with sessions
+but without tab functionality.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="188"/>
+        <source>Uncheck for 1/5 of the width.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="191"/>
+        <source>Remember splitter position</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="200"/>
+        <source>Do not show &toolbar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="207"/>
+        <source>If the menubar is hidden,
+a menu button appears on the toolbar.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="211"/>
+        <source>Do not show &menubar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
+        <source>Hide search &bar by default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="236"/>
+        <source>By default, each search entry
+has a separate search history.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="240"/>
+        <source>Use a shared search history</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="247"/>
+        <source>Always show st&atus bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="272"/>
+        <source>Show cursor position on status bar</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
+        <source>Will take effect after closing this dialog.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="286"/>
+        <source>Tab position: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="297"/>
+        <source>North</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="302"/>
+        <source>South</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="307"/>
+        <source>West</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="312"/>
+        <source>East</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="338"/>
+        <source>This means that, for LTR, Alt+Right goes to the first tab
+after the last tab is activated, and the same for Alt+Left.
+
+Tab navigation with mouse wheel is not affected.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="344"/>
+        <source>Tab navigation wraps &around</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="364"/>
+        <source>Close window on closing its last tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="371"/>
+        <source>By default, if a FeatherPad window exists on the
+current desktop, files will be opened in its tabs.
+
+However, some desktop environments may not
+report that they have multiple desktops.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="378"/>
+        <source>Always open in separate windows</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="385"/>
+        <source>If this is checked, the file dialog provided by the current
+desktop environment will be used instead of the Qt file dialog.
+
+Some desktop environments, like KDE and LXQt, provide files dialogs.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="391"/>
+        <source>Native file dialog</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="467"/>
+        <source>Uncheck for Monospace.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="470"/>
+        <source>Remember &font</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="491"/>
+        <source>This covers parentheses, braces, brackets and quotes.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="494"/>
+        <source>Auto-&bracket</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="501"/>
+        <source>By default, a triple period is replaced with an ellipsis
+and a double hyphen with a long dash while typing,
+under proper circumstances.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="506"/>
+        <source>Replace triple periods and double hyphens while typing</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="520"/>
+        <source>Highlight case-sensitive and whole matches
+of the selected text.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="524"/>
+        <source>Selection highlighting</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="587"/>
+        <source>Never highlight syntax for files > </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="556"/>
+        <source>This creates a menu button on the
+status bar for changing the syntax.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="560"/>
+        <source>Support syntax override</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="625"/>
+        <source>Show spaces, tabs and tab lines
+when the syntax is highlighted.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="629"/>
+        <source>Show whitespaces</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
+        <source>The vertical position lines will be drawn only if
+the editor font has a fixed pitch (like Monospace).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="649"/>
+        <source>Show vertical lines starting from this position:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="636"/>
+        <source>Also show line and document ends</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="775"/>
+        <source>Date and time format:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="845"/>
+        <source>Some text editors cannot open a document
+whose last line is not empty.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="849"/>
+        <source>Ensure an empty last line on saving</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="856"/>
+        <source>Remove trailing spaces on saving</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="874"/>
+        <source>Inertial scrolling with mouse wheel</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="963"/>
+        <source>Files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="969"/>
+        <source>File Management</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1086"/>
+        <source>Start with files of last window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
+        <source>This can be any starting command with
+arguments, for example, "xterm -hold"
+for running the process in XTerm.
+
+If the command is left empty, the file
+will be executed directly.
+
+If the script is not run in a terminal
+emulator, the output and error messages
+will be shown by a popup dialog.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1140"/>
+        <source>Start with this command: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1159"/>
+        <source>Command + Arguments</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1044"/>
+        <source>Show recentl&y modified files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1074"/>
+        <source>Show recentl&y opened files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1173"/>
+        <source>Save changes to opened files every:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1439"/>
+        <source>Help</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="163"/>
+        <source>Start with side-pane mode</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="351"/>
+        <source>If this is checked, not only you will lose the informative
+tooltip and context menu of a single tab but you could not
+merge a single tabbed window into another one by tab drag-
+and-drop either.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="357"/>
+        <source>&Do not show a single tab</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="422"/>
+        <source>Text</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="461"/>
+        <source>Text Editor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="477"/>
+        <source>&Wrap lines by default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="484"/>
+        <source>Auto-&indent by default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="513"/>
+        <source>Always show line &numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="531"/>
+        <source>Highlight s&yntax by default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="691"/>
+        <source>Dark c&olor scheme</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="726"/>
+        <source>Background color value: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="594"/>
+        <source> MiB</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1093"/>
+        <source>This only includes executable files written
+in script languages like Shell and Python.
+
+If it is checked and the opened file is
+executable, the file will be executed by clicking
+the Run button, that appears on the toolbar/filemenu
+when needed, or by its shortcut Ctrl+E. Then, the
+process could be killed by Ctrl+Alt+E.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="688"/>
+        <source>Needs window reopening to take effect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
+        <source>The color value of the background.
+255 means white while 0 means black.
+
+For the light background, it can be
+between 230 and 255; for the dark
+background, between 0 and 50.
+
+Needs window reopening to take effect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1103"/>
+        <source>Run executable scripts</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
+        <source>The maximum number of recently modified or
+opened files FeatherPad shows. The default
+is 10.
+
+Needs application restart to take effect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
+        <source>Used for pasting the date and time.
+
+Takes effect after closing this dialog.
+
+Leave empty for:
+MMM dd, yyyy, hh:mm:ss</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="804"/>
+        <source>Text tab size:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="811"/>
+        <source> spaces</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="863"/>
+        <source>Thick text cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="870"/>
+        <source>Should the mouse wheel scrolling be inertial
+if the cursor is inside the text view?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="881"/>
+        <source>Spell Checking</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
+        <source>A Hunspell dictionary has a name that ends with ".dic"
+and should be alongside an affix file with the same
+name but ending with ".aff".</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="894"/>
+        <source>Hunspell dictionary path:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
+        <source>Add dictionary...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="925"/>
+        <source>If this is unchecked, spell checking
+will be started from the document start.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="929"/>
+        <source>Start spell checking from text cursor</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="984"/>
+        <source>Number of recent files: </source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1083"/>
+        <source>Only if their number is not greater than 50.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
+        <source>Only for files that exist and can be saved.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1183"/>
+        <source> min</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1214"/>
+        <source>If this is checked, the Save button/menu-item could
+be used also when the opened file is not modified.
+
+This can be useful under certain circumstances,
+e.g. for changing the time stamp or removing the
+trailing spaces of a text file.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1222"/>
+        <source>Allow saving unmodified files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1229"/>
+        <source>Show a warning instead.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1232"/>
+        <source>Do not permit opening of non-text files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1239"/>
+        <source>By default, when files are copied, they will
+be opened if they are pasted into FeatherPad.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1243"/>
+        <source>Paste paths instead of files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1270"/>
+        <source>Shortcuts</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1289"/>
+        <source>Action</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1294"/>
+        <source>Shortcut</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1302"/>
+        <source>Restore default shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
+        <source>Default</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1316"/>
+        <source>Syntax Colors</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1332"/>
+        <source>Element</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1337"/>
+        <source>Text Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1350"/>
+        <source>Whitespace color value:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
+        <source>Has effect only if line numbers are shown.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1383"/>
+        <source>Current line highlight value:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1415"/>
+        <source>Restore default syntax colors.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1450"/>
+        <source>Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="104"/>
+        <source>Press a modifier key to clear a shortcut
+in the editing mode.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="110"/>
+        <source>Double click a color to change it.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>files</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>file</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
+        <source>Warning: Ambiguous shortcut detected!</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="392"/>
+        <source>Functions, URLs,…</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="393"/>
+        <source>Built-in Functions</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="394"/>
+        <source>Comments</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="395"/>
+        <source>Quotations</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="396"/>
+        <source>Types</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="397"/>
+        <source>Key Words</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="398"/>
+        <source>Numbers</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="399"/>
+        <source>Regular Expressions, Code Blocks,…</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="400"/>
+        <source>Document Blocks, XML/HTML Elements,…</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="401"/>
+        <source>Markdown Headings, CSS Values,…</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="402"/>
+        <source>Extra Elements</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="563"/>
+        <source>Application restart is needed for changes to take effect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="582"/>
+        <source>Window reopening is needed for changes to take effect.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1370"/>
+        <source>&Recently Opened</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1371"/>
+        <source>Recently &Modified</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1446"/>
+        <source>The typed shortcut was reserved.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1650"/>
+        <source>Hunspell Dictionary Files (*.dic)</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
+        <source>Select Syntax Color</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SearchBar</name>
+    <message>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
+        <source>Search...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="125"/>
+        <source>Match Case</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="132"/>
+        <source>Whole Word</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="139"/>
+        <source>Regular Expression</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="171"/>
+        <source>Search with regex...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="120"/>
+        <source>Next</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="121"/>
+        <source>Previous</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SessionDialog</name>
+    <message>
+        <location filename="../../sessionDialog.ui" line="14"/>
+        <source>Session Manager</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="101"/>
+        <location filename="../../sessionDialog.ui" line="270"/>
+        <source>&Remove</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="33"/>
+        <source><b>Save/Restore Session</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="56"/>
+        <source>Filter...</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="69"/>
+        <source>Open the selected session(s).</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="72"/>
+        <location filename="../../sessionDialog.ui" line="275"/>
+        <source>&Open</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="98"/>
+        <location filename="../../sessionDialog.ui" line="108"/>
+        <source>Del</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="115"/>
+        <location filename="../../sessionDialog.ui" line="125"/>
+        <source>Ctrl+Del</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="159"/>
+        <source>By default, all files that are opened in all
+windows will be included in the saved session.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="163"/>
+        <source>Save only from this &window</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="180"/>
+        <source><b>Warning</b></source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="226"/>
+        <location filename="../../session.cpp" line="328"/>
+        <source>&Yes</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="233"/>
+        <source>&No</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="283"/>
+        <source>Re&name</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="118"/>
+        <source>Remove &All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="260"/>
+        <source>&Close</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="135"/>
+        <source>Save the current session under the given title.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="138"/>
+        <source>&Save</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="149"/>
+        <source>Type a name to save session</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="179"/>
+        <source>Nothing saved.<br>No file was opened.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="277"/>
+        <source>No file exists or can be opened.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="279"/>
+        <source>Not all files exist or can be opened.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="314"/>
+        <source>&OK</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="333"/>
+        <source>Do you really want to remove all saved sessions?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="339"/>
+        <source>Do you really want to remove the selected sessions?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="341"/>
+        <source>Do you really want to remove the selected session?</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="346"/>
+        <source>A session with the same name exists.<br>Do you want to overwrite it?</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SidePane</name>
+    <message>
+        <location filename="../../sidepane.cpp" line="196"/>
+        <source>Filter...</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SpellDialog</name>
+    <message>
+        <location filename="../../spellDialog.ui" line="25"/>
+        <source>Unknown word:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="51"/>
+        <source>Add To Dictionary</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="62"/>
+        <source>Replace with:</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="129"/>
+        <source>Correct Once</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="142"/>
+        <source>Correct All</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="87"/>
+        <source>Ignore Once</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="100"/>
+        <source>Ignore All</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::TextEdit</name>
+    <message>
+        <location filename="../../textedit.cpp" line="147"/>
+        <source>Double click to center current line</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+</TS>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_sk_SK.ts featherpad-1.0.1/featherpad/data/translations/featherpad_sk_SK.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_sk_SK.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_sk_SK.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Licencia</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>Bez mena</translation>
     </message>
@@ -65,9 +65,9 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>Kódovanie</translation>
     </message>
@@ -134,7 +134,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Uložiť</translation>
     </message>
@@ -609,9 +609,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Nahradiť</translation>
     </message>
@@ -797,449 +797,461 @@
         <translation>Nahradiť všetko</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>&Nedávno otvorené</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Zatvoriť</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Uložiť zmeny?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Dokument bol upravený.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>&Zahodiť zmeny</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>&Prerušiť</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>&Nie všetkým</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Neuložené</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Riadky</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Vybraté znaky</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Slová</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Súbor neexistuje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Otvoriť link</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Vyčistiť</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Niektoré súbory sa nedá otvoriť!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Pravdepodobne chýba povolenie k čítaniu.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Súbro nemôže byť upravovaný!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Nie je možné upravovať súbor, dlhé riadky nemôžu byť upravované.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Bolo zistené predošlé zlyhanie!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Inštancia Root</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Všetky súbory (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>Všetky súbory (*);;.%1 Súbory  (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 Súbory (*.%1);;Všetky súbory (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Uložiť ako...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Áno</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>Prerušiť</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Nedá sa uložiť!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Neotvorené veľké súbory!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Vytlačiť dokument</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Viď predvoľby → Text → Kontrola pravopisu!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Slovník hunspell neexistuje.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>V dokumente nebol nájdený žiaden preklep.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Žiaden preklep od  textového kurzoru.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Prekladatelia</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>Založené na Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>O  FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>Žiadna náhrada</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Jedno nahradenie</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform></numerusform>
@@ -1248,12 +1260,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation></translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1431,63 +1443,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1495,17 +1518,17 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1514,12 +1537,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1527,141 +1550,141 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1675,32 +1698,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation></translation>
     </message>
@@ -1710,7 +1733,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1718,57 +1741,57 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1780,13 +1803,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1798,13 +1821,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1813,8 +1836,8 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1824,84 +1847,84 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>Kontrola pravopisu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Cesta k slovníku hunspell:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Pridať slovník...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>Začať kontrolou pravopisu od textového kurzoru</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1911,96 +1934,96 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation></translation>
     </message>
@@ -2016,111 +2039,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Súbor slovníka hunspell (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2128,38 +2151,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation></translation>
     </message>
@@ -2311,7 +2334,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation></translation>
     </message>
@@ -2357,7 +2380,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_tr.ts featherpad-1.0.1/featherpad/data/translations/featherpad_tr.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_tr.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_tr.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>Lisans</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>İsimsiz</translation>
     </message>
@@ -58,7 +58,7 @@
         <location filename="../../fp.ui" line="189"/>
         <location filename="../../fp.ui" line="980"/>
         <source>&Edit</source>
-        <translation>Düz&enle</translation>
+        <translation>&Düzenle</translation>
     </message>
     <message>
         <location filename="../../fp.ui" line="219"/>
@@ -66,9 +66,9 @@
         <translation>&Seçenekler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translatorcomment>Reminder: Should really have been "Karakter Kodlama", but trimmed due to space constraints on status bar.</translatorcomment>
         <translation>Kodlama</translation>
@@ -136,7 +136,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>&Kaydet</translation>
     </message>
@@ -616,9 +616,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>Metin Değiştirme</translation>
     </message>
@@ -805,456 +805,468 @@
         <translation>Hepsini değiştir</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translatorcomment>RAPOR 3 : Only used at initial launch (if recent file criterium is "recently opened"). After changing the criterium from "recently opened" to "recently modified", and then again back to "recently opened" in the Preferences dialog, then this message is never used again. Instead, duplicate of this message in the PrefDialog is used from then on.</translatorcomment>
         <translation>&Son Açılan Belgeler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>Kapat</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>Değişiklikler kaydedilsin mi?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>Lütfen o pencereyle ilgilenin, en azından o diyaloğu kapatın!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>Belge değiştirildi.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>Kaydetme</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>İptal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>Hepsine &Hayır</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>Kaydedilmedi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>Satır</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>Seçim</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>Kelime</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>Bu sekmede başka bir süreç çalışıyor!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>Betik Dosyası</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>Başka FeatherPad penceresinde cevap bekleyen bir diyalog var!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>Konum:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>Böyle bir dosya yok.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>Bağlantıyı Aç</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>Bağlantıyı Kopyala</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>Bir sekmede birden fazla süreç çalışamaz.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>Betik Çıktısı</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>Temizle</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad 100 MB'den büyük dosyaları açmaz.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>Metin olmayan dosya(lar) açılmadı!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>Tercihler → Dosyalar → Metin olmayan dosyaların açılmasına izin verme bölümüne bakın</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>Bazı dosya(lar) açılamadı!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>Dosyayı okuma yetkiniz olmayabilir.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>Düzenlenemeyen dosya(lar)!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>Metin olmayan dosyalar veya aşırı uzun satırlar içeren dosyalar düzenlenemezler.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>Evvelki çökme tespit edildi!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>Tercihen, tüm FeatherPad pencerelerini kapatıp tekrar başlatın!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>Yetkili Kullanıcı</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>Tüm Dosyalar (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translatorcomment>Reminder: %1 refers to file type as in ".txt files (*.txt)"</translatorcomment>
         <translation>Tüm Dosyalar (*);;.%1 Dosyaları (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>Dosya aç...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translatorcomment>Reminder: %1 refers to file type as in ".txt files (*.txt)"</translatorcomment>
         <translation>.%1 Dosyaları (*.%1);;Tüm Dosyalar (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>Farklı Kaydet...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>Karakter kodlamayı koruyarak farklı kaydet...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>Yönetici olarak kaydediliyor.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>Kimlik doğrulama için bekleniyor...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" bulunamadı. Lütfen Polkit'i kurun!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>Evet</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>Hayır</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>İptal</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation><b>MS Windows</b> satır sonlandırmasını kullanmak istiyor musunuz?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>MS Windows'da okunabilirlik açısından iyi olabilir.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>Kaydedilemiyor!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>Yardım</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>Sözdizimi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>Aşırı büyük dosya(lar) açılmadı!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>Metin sekmeleri boşluklara dönüştürülür.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>Seçili metin çok uzundu.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>Tam olarak işlenmemiş.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>Bu dosya başka bir yerde veya başka surette değiştirilmiş!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>Lütfen bu dosyayı tekrar yüklerken veya kaydederken dikkatli olun!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>Yazdırma devam ediyor ...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>Belgeyi Yazdır</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
-        <translation type="unfinished"></translation>
+        <translation>Baskı tamamlandı.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 Sayfa</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>Hedef Yolunu Kopyala</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>Hedefi Buraya Aç</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Son Hedef Yolunu Kopyala</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Son Hedef Yolunu Aç</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>Dosyayı içeren dizini açın</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>Hunspell sözlüğü eklemeniz gerekiyor.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>Tercihler → Metin → İmla Denetimi'ne bakın!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell sözlüğü mevcut değil.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell sözlüğüne bir ek dosyası eşlik etmez.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>Belgede yazım hatası yok.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>Metin imlecinden yanlış yazım yok.</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>İmla Denetimi</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>Bazı dosyalar kaydedilemez!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>Çevirmenler</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translatorcomment>RAPOR 7: Please see the other comment.</translatorcomment>
         <translation>Hafif, sekmeli, düz metin düzenleyici</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translatorcomment>RAPOR 7: Either has to be put at the start or mid-sentence as part of the features, or has to be added to the end as an afterthought. Because of such things, I suggest this and the preceding message be merged in a single compound sentence.</translatorcomment>
         <translation>Qt tabanlı</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>Yazar</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translatorcomment>Reminder: Lesser alternatives: "yani" (that is) ; "rumuz" (nick) ; "veya" (or)</translatorcomment>
         <translation>nam-ı diğer,</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>FeatherPad Hakkında</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translatorcomment>Reminder: Literally "Zero Replacement" (in English "no" negates the expression, whereas in Turkish it should (also) be negated at the verb. Since the verb will either be non-existent or fixed as positive, then "zero replacement [done]" is the only acceptable wording left in Turkish, AFAIK.)</translatorcomment>
         <translation>Sıfır Değişiklik</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>Bir Değişiklik</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translatorcomment>Reminder: Must be singular for enumerated items as in "7 file" but NOT "7 files"</translatorcomment>
         <translation>
@@ -1262,12 +1274,12 @@
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>İlk 1000 değiştirme vurgulanmıştır.</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>Sözdizimi vurgulaması için boyut sınırı aşıldı.</translation>
     </message>
@@ -1275,14 +1287,14 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>Gizli dosya gösterimini aç/kapa</translatorcomment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translatorcomment>Gizli dosya gösterimini aç/kapa</translatorcomment>
@@ -1450,64 +1462,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Menü çubuğu hızlandırıcıları Alt tarafından etkinleştirilir
+ve özelleştirilmiş kısayollara müdahale edebilir.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Menü çubuğu hızlandırıcılarını devre dışı bırak</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>&Öntanımlı olarak arama çubuğunu gizle</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>Varsayılan olarak, her arama girişi
 ayrı bir arama geçmişine sahiptir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>Paylaşılan bir arama geçmişi kullanın</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>D&urum çubuğunu daima göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>Durum &çubuğunda imleç konumunu göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>Pencereyi kapatınca etkinleşecektir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>Sekme konumu: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>Üst</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>Alt</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>Sol</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>Sağ</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1518,17 +1542,17 @@
 Fare tekeriyle sekme gezinimi bundan etkilenmez.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>Sekme &gezinimi sondan başa sarsın</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>So&n sekmeyi kapatınca pencereyi de kapat</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1542,12 +1566,12 @@
 kullanıldığını bildirmeyebilirler.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>D&osyaları daima ayrı pencerelerde aç</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1558,32 +1582,32 @@
 KDE ve LXQt gibi bazı masaüstlerinin kendi dosya diyaloğu vardır.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>Sistem &öntanımlı dosya diyaloğu</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>Monospace kullanmak için boş bırakın.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>&Yazı tipini hatırla</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>Parantez, grup parantezi, köşeli parantez ve tırnak işaretlerini kapsar.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>&Otomatik parantezler</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1592,115 +1616,115 @@
 çizgi ile değiştirilir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>Yazarken üçlü noktaları ve çift kısa çizgileri değiştir</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>Seçili metnin büyük/küçük harfe duyarlı
  ve tam eşleşmelerini vurgulayın.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>Seçim vurgulama</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translatorcomment>Reminder: MA in caps to stress negation (has double/conflicting meanings)</translatorcomment>
         <translation>Bundan büyük dosyalarda sözdizimini vurgulama </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>Sözdizimini değiştirme için durum çubuğunda menü düğmesi oluşturur.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>&Farklı sözdizimi seçme imkanı</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>Sentaks vurgulanırken, boşlukları,
 sekmeleri ve sekme çizgilerini göster.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>Boşlukları ve sekmeleri göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>Düşey çizgiler sadece sabit genişlikte yazı
 tipi (Monospace gibi) kullanılıyorsa çizilir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translatorcomment>RAPOR 5 : Translated as "Show vertical lines with this spacing" as it seemed more appropriate.</translatorcomment>
         <translation>Bu aralıklarla düşey &çizgi göster:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>&Satır ve belge sonlarını da göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>Tarih ve zaman biçimi:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>Bazı metin düzenleyiciler, son satırı
 boş olmayan belgeleri açamazlar.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>Kaydederken sonda boş satır olduğundan emin olun</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>Kaydederken en sondaki bo&şlukları kırp</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>Fare tekeriyle &ataletli kaydırma yap</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>&Dosyalar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>Dosya Yönetimi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>&Son kapatılan penceredeki dosyalarla başla</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1722,32 +1746,32 @@
 bir diyalog balonuyla gösterilir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>Bu komutla başlat: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>Komut + Parametreler</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>Son değiştirilen dosyaları &göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>Son &açılan dosyaları göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>Dosyaları &otomatik kaydetme aralığı:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>Yardım</translation>
     </message>
@@ -1757,7 +1781,7 @@
         <translation>&Yan panel kipinde başla</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1768,57 +1792,57 @@
 diğeriyle birleştirebilme imkanını da kaybedersiniz.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&Tek sekme varsa gösterme</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>&Metin</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>Metin Düzenleyici</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>Öntanımlı olarak satırları sa&r</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>Öntanımlı olarak otomatik &girintile</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>Daima satır &numaralarını göster</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>Öntanımlı olarak sentaksı &vurgula</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>Koyu renk &tarzı</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>Arkaplan renk değeri: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation> MB</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1836,13 +1860,13 @@
 Bilahare, program Ctrl+Alt+E ile sonlandırılabilir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>Yeni pencere açıldığında etkinleşir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1860,13 +1884,13 @@
 Yeni pencere açıldığında etkinleşir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>&Çalıştırılabilir betikleri çalıştır</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1878,8 +1902,8 @@
 Uygulama tekrar başlatılınca etkinleşir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1897,35 +1921,35 @@
 hh=saat ; mm=dakika ; ss=saniye</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>Metin sekme genişliği:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> boşluk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>Kalın metin imleci</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>İmleç metin alanındaysa, fare tekeriyle
 kaydırmada atalet özelliği olsun mu?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>İmla Denetimi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1934,51 +1958,51 @@
 dosyası da yanında yer almalıdır.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell sözlük yolu:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>Sözlük ekle...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>Bu işaretlenmemişse, yazım denetimi
  belge başlangıcından başlayacaktır.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>İmla denetimini metin imlecinden başlat</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>Son kullanılan dosya adedi: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>Sayılarının 50'yi aşmaması şartıyla.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>Sadece kaydedilebilir mevcut dosyalar için caridir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> dk</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1992,97 +2016,97 @@
 güncellemek veya dosya sonundaki boşlukları kırpmak için.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>D&eğişmemiş dosyalar da kaydedilebilsin</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>Onun yerine bir uyarı göster.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>Metin olmayan dosyaları açma</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>Varsayılan olarak, dosyalar kopyalandığında
 FeatherPad'e yapıştırılırsa açılabilir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>Dosyalar yerine yolları yapıştırın</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>&Kısayollar</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>İşlem</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>Kısayol</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>Öntanımlı kısayolları geri yükle.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>Öntanımlı</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>Sözdizimi Renkleri</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>Öge</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>Metin Rengi</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>Boşluk rengi değeri:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>Yalnızca satır numaraları gösteriliyorsa etkilidir.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>Mevcut satır vurgulama değeri:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>Varsayılan sözdizimi renklerini geri yükleyin.</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>Kapat</translation>
     </message>
@@ -2099,112 +2123,112 @@
         <translation>Değiştirmek için bir renge çift tıklayın.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translatorcomment>Reminder: Enumerated items are used in singular (e.g. "7 file" instead of "7 files").</translatorcomment>
         <translation>dosya</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>dosya</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>Uyarı: Muğlak kısayol tespit edildi!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>İşlevler, URL'ler,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>Yerleşik İşlevler</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>Yorumlar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>Alıntılar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>Türler</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>Anahtar Kelimeler</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>Rakamlar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>Düzenli İfadeler, Kod Blokları,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>Belge Blokları, XML / HTML Öğeleri,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown Başlıkları, CSS Değerleri,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>Ekstra Elemanlar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>Uygulama tekrar başlatılınca değişiklikler etkinleşir.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>Değişikliklerin etkinleşmesi için yeni pencere açılmalıdır.</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>&Son Açılanlar</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>&Son Değiştirilenler</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>Girilen kısayol tahsisli (kullanılamaz).</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell Sözlük Dosyaları (* .dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>Sözdizimi Rengini Seçin</translation>
     </message>
@@ -2212,38 +2236,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>Ara...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>Büyük/Küçük Duyarlı</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>Tam Kelime</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>Düzenli İfadeler</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>regex ile ara ...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>Sonraki</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>Evvelki</translation>
     </message>
@@ -2396,7 +2420,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>Süzgeç...</translation>
     </message>
@@ -2442,7 +2466,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>Bulunulan satırı ortalamak için çift tıklayın</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad.ts featherpad-1.0.1/featherpad/data/translations/featherpad.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation type="unfinished"></translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation type="unfinished"></translation>
     </message>
@@ -65,9 +65,9 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation type="unfinished"></translation>
     </message>
@@ -134,7 +134,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation type="unfinished"></translation>
     </message>
@@ -609,9 +609,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation type="unfinished"></translation>
     </message>
@@ -797,461 +797,473 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation type="unfinished"></translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation type="unfinished">
             <numerusform></numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1259,13 +1271,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation type="unfinished"></translation>
@@ -1429,63 +1441,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1493,17 +1516,17 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1512,12 +1535,12 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1525,141 +1548,141 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1673,32 +1696,32 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation type="unfinished"></translation>
     </message>
@@ -1708,7 +1731,7 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1716,57 +1739,57 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1778,13 +1801,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1796,13 +1819,13 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1811,8 +1834,8 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1822,84 +1845,84 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1909,96 +1932,96 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2014,111 +2037,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2126,38 +2149,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2309,7 +2332,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2355,7 +2378,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation type="unfinished"></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_uk.ts featherpad-1.0.1/featherpad/data/translations/featherpad_uk.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_uk.ts	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_uk.ts	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,2459 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="uk">
+<context>
+    <name>FeatherPad::AboutDialog</name>
+    <message>
+        <location filename="../../about.ui" line="167"/>
+        <source>License</source>
+        <translation>Ліцензія</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FPwin</name>
+    <message>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
+        <location filename="../../fpwin.cpp" line="2077"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
+        <source>Untitled</source>
+        <translation>Новий</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="71"/>
+        <source>Go to line:</source>
+        <translation>Перейти до рядка:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="107"/>
+        <source>Select text from cursor to this line
+(Ctrl+Shift+J)</source>
+        <translation>Вибрати текст від курсора до цього рядка
+(Ctrl+Shift+J)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="111"/>
+        <source>Select Text</source>
+        <translation>Вибрати текст</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="114"/>
+        <source>Ctrl+Shift+J</source>
+        <translation>Ctrl+Shift+J</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="149"/>
+        <source>&File</source>
+        <translation>&Файл</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="189"/>
+        <location filename="../../fp.ui" line="980"/>
+        <source>&Edit</source>
+        <translation>&Редагувати</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="219"/>
+        <source>&Options</source>
+        <translation>&Опції</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
+        <source>Encoding</source>
+        <translation>Кодування</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="282"/>
+        <source>&Search</source>
+        <translation>&Пошук</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="290"/>
+        <location filename="../../fp.ui" line="746"/>
+        <source>&Help</source>
+        <translation>&Довідка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="390"/>
+        <source>Find:</source>
+        <translation>Знайти:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="406"/>
+        <source>To be replaced</source>
+        <translation>Підлягає заміні</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="419"/>
+        <source>Replace with:</source>
+        <translation>Замінити на:</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="435"/>
+        <source>Replacing text</source>
+        <translation>Текст для заміни</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="494"/>
+        <source>&New</source>
+        <translation>&Новий</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="497"/>
+        <source>New tab</source>
+        <translation>Нова вкладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="500"/>
+        <source>Ctrl+N</source>
+        <translation>Ctrl+N</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="505"/>
+        <source>&Open</source>
+        <translation>&Відкрити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="508"/>
+        <source>Open a file</source>
+        <translation>Відкрити файл</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="511"/>
+        <source>Ctrl+O</source>
+        <translation>Ctrl+O</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="519"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
+        <source>&Save</source>
+        <translation>З&берегти</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="522"/>
+        <source>Save the current tab</source>
+        <translation>Зберегти поточну вкладку</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="525"/>
+        <source>Ctrl+S</source>
+        <translation>Ctrl+S</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="533"/>
+        <source>&Undo</source>
+        <translation>&Повернути</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="536"/>
+        <source>Undo</source>
+        <translation>Повернути</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="539"/>
+        <source>Ctrl+Z</source>
+        <translation>Ctrl+Z</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="547"/>
+        <source>&Redo</source>
+        <translation>П&овторити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="550"/>
+        <source>Redo</source>
+        <translation>Повторити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="553"/>
+        <source>Ctrl+Shift+Z</source>
+        <translation>Ctrl+Shift+Z</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="561"/>
+        <location filename="../../fp.ui" line="564"/>
+        <source>Reload</source>
+        <translation>Перезавантажити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="567"/>
+        <source>Ctrl+Shift+R</source>
+        <translation>Ctrl+Shift+R</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="572"/>
+        <source>&Find</source>
+        <translation>&Пошук</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="578"/>
+        <source>Ctrl+F</source>
+        <translation>Ctrl+F</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="586"/>
+        <source>Show/hide replacement dock</source>
+        <translation>Відкрити/сховати панель заміни</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="589"/>
+        <source>Ctrl+R</source>
+        <translation>Ctrl+R</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="594"/>
+        <source>Save &As</source>
+        <translation>Зберегти &як</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="597"/>
+        <source>Ctrl+Shift+S</source>
+        <translation>Ctrl+Shift+S</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="602"/>
+        <source>&Print</source>
+        <translation>&Друкувати</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="605"/>
+        <source>Ctrl+P</source>
+        <translation>Ctrl+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="610"/>
+        <source>Documen&t Properties</source>
+        <translation>Властивос&ті документа</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="613"/>
+        <source>Ctrl+Shift+D</source>
+        <translation>Ctrl+Shift+D</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="618"/>
+        <source>&Close</source>
+        <translation>Закр&ити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="621"/>
+        <source>Ctrl+Shift+Q</source>
+        <translation>Ctrl+Shift+Q</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="626"/>
+        <source>&Quit</source>
+        <translation>Вий&ти</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="629"/>
+        <source>Ctrl+Q</source>
+        <translation>Ctrl+Q</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="637"/>
+        <source>&Cut</source>
+        <translation>&Вирізати</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="640"/>
+        <source>Ctrl+X</source>
+        <translation>Ctrl+X</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="648"/>
+        <source>C&opy</source>
+        <translation>С&копіювати</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="651"/>
+        <source>Ctrl+C</source>
+        <translation>Ctrl+C</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="656"/>
+        <source>&Paste</source>
+        <translation>В&ставити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="659"/>
+        <source>Ctrl+V</source>
+        <translation>Ctrl+V</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="667"/>
+        <source>&Delete</source>
+        <translation>В&идалити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="672"/>
+        <source>&Select All</source>
+        <translation>Вид&ілити все</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="675"/>
+        <source>Ctrl+A</source>
+        <translation>Ctrl+A</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="680"/>
+        <source>&Font</source>
+        <translation>&Шрифт</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="688"/>
+        <source>&Line Numbers</source>
+        <translation>&Нумерація рядків</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="691"/>
+        <source>Ctrl+L</source>
+        <translation>Ctrl+L</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="702"/>
+        <source>&Wrap Lines</source>
+        <translation>П&еренесення рядків</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="705"/>
+        <source>Ctrl+W</source>
+        <translation>Ctrl+W</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="716"/>
+        <source>&Auto-Indentation</source>
+        <translation>&Автоабзацування</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="719"/>
+        <source>Ctrl+I</source>
+        <translation>Ctrl+I</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="730"/>
+        <source>&Syntax Highlighting</source>
+        <translation>Підсвіч&ування правопису</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="733"/>
+        <source>Ctrl+Shift+H</source>
+        <translation>Ctrl+Shift+H</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="738"/>
+        <source>&Preferences</source>
+        <translation>Налаш&тування</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="741"/>
+        <source>Ctrl+Shift+P</source>
+        <translation>Ctrl+Shift+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="749"/>
+        <source>Ctrl+H</source>
+        <translation>Ctrl+H</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="754"/>
+        <source>&About</source>
+        <translation>Пр&о застосунок</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="781"/>
+        <source>Enforce UTF-8</source>
+        <translation>Примусово UTF-8</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="964"/>
+        <source>Save with &Encoding</source>
+        <translation>Зберегти з &кодуванням</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="969"/>
+        <source>&Jump to</source>
+        <translation>П&ерехід до</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="972"/>
+        <source>Show/hide jump bar</source>
+        <translation>Відкрити/сховати панель переходу</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="975"/>
+        <source>Ctrl+J</source>
+        <translation>Ctrl+J</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="983"/>
+        <source>Edit text</source>
+        <translation>Редагувати текст</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="986"/>
+        <source>Ctrl+Shift+E</source>
+        <translation>Ctrl+Shift+E</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1089"/>
+        <source>&Run</source>
+        <translation>&Запуск</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1095"/>
+        <source>Ctrl+E</source>
+        <translation>Ctrl+E</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1100"/>
+        <source>&Clear</source>
+        <translation>&Очистити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1103"/>
+        <source>Clear the list of recently modified files</source>
+        <translation>Очищення списку нещодавно змінених файлів</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1108"/>
+        <source>Save/Restore Session</source>
+        <translation>Зберегти/відновити сеанс</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1111"/>
+        <source>Sa&ve/Restore Session</source>
+        <translation>Збе&регти/відновити сеанс</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1114"/>
+        <source>Ctrl+M</source>
+        <translation>Ctrl+M</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1119"/>
+        <source>Side-Pane</source>
+        <translation>Бічна панель</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1122"/>
+        <source>Ctrl+Alt+P</source>
+        <translation>Ctrl+Alt+P</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1127"/>
+        <source>Paste Date and Time</source>
+        <translation>Вставити дату й час</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1130"/>
+        <source>Ctrl+Shift+V</source>
+        <translation>Ctrl+Shift+V</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1135"/>
+        <location filename="../../fp.ui" line="1138"/>
+        <source>To Upper Case</source>
+        <translation>Великими буквами</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1141"/>
+        <source>Ctrl+Shift+U</source>
+        <translation>Ctrl+Shift+U</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1146"/>
+        <location filename="../../fp.ui" line="1149"/>
+        <source>To Lower Case</source>
+        <translation>Маленькими буквами</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1152"/>
+        <source>Ctrl+Shift+L</source>
+        <translation>Ctrl+Shift+L</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1157"/>
+        <location filename="../../fp.ui" line="1160"/>
+        <source>To Start Case</source>
+        <translation>Типовий розмір букв</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1168"/>
+        <location filename="../../fp.ui" line="1171"/>
+        <source>Last Active Tab</source>
+        <translation>Остання активна вкладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1174"/>
+        <source>F1</source>
+        <translation>F1</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1179"/>
+        <location filename="../../fp.ui" line="1182"/>
+        <source>Sort Lines</source>
+        <translation>Сортування рядків</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1187"/>
+        <location filename="../../fp.ui" line="1190"/>
+        <source>Sort Lines Reversely</source>
+        <translation>Зворотне сортування рядків</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1195"/>
+        <source>Check Spelling</source>
+        <translation>Перевірка правопису</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1198"/>
+        <source>F2</source>
+        <translation>F2</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1203"/>
+        <location filename="../../fp.ui" line="1206"/>
+        <source>Save All Files</source>
+        <translation>Зберегти всі файли</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1211"/>
+        <location filename="../../fp.ui" line="1214"/>
+        <source>User Dictionary</source>
+        <translation>Користувацький словник</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1219"/>
+        <source>Text Tabs to Spaces</source>
+        <translation>Зміна табуляторів на пробіли</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="994"/>
+        <source>&Detach Tab</source>
+        <translation>В&ідокремити вкладку</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="997"/>
+        <source>Ctrl+T</source>
+        <translation>Ctrl+T</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1010"/>
+        <source>Close Ne&xt Tabs</source>
+        <translation>Закрити на&ступні вкладки</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1015"/>
+        <source>Close &Previous Tabs</source>
+        <translation>Закрити &попередні вкладки</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1043"/>
+        <source>Ne&xt Tab</source>
+        <translation>Н&аступна вкладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1054"/>
+        <source>Previous Ta&b</source>
+        <translation>Попередня вк&ладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1092"/>
+        <source>Execute</source>
+        <translation>Виконати</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1020"/>
+        <source>Close &All Tabs</source>
+        <translation>Закрити &всі вкладки</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="153"/>
+        <source>Recently &Modified</source>
+        <translation>Н&едавно змінені</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="223"/>
+        <source>&Encoding</source>
+        <translation>&Кодування</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="227"/>
+        <source>&Unicode</source>
+        <translation>&Юнікод</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="234"/>
+        <source>&Western European</source>
+        <translation>&Західноєвропейське</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="242"/>
+        <source>&East European</source>
+        <translation>&Східноєвропейське</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="250"/>
+        <source>Ea&st Asian</source>
+        <translation>С&хідноазійське</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="342"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
+        <source>Replacement</source>
+        <translation>Заміна</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="575"/>
+        <source>Focus/hide search bar</source>
+        <translation>Відкрити/сховати панель пошуку</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="583"/>
+        <source>&Replace</source>
+        <translation>&Замінити</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="765"/>
+        <source>Windows Arabic (&CP1256)</source>
+        <translation>Арабська Windows (&CP1256)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="773"/>
+        <source>&Other</source>
+        <translation>&Інше</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="792"/>
+        <source>&UTF-8</source>
+        <translation>&UTF-8</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="803"/>
+        <source>UTF-&16</source>
+        <translation>UTF-&16</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="814"/>
+        <source>&ISO-8859-1</source>
+        <translation>&ISO-8859-1</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="825"/>
+        <source>&Windows-1252</source>
+        <translation>&Windows-1252</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="836"/>
+        <source>&Cyrillic (CP1251)</source>
+        <translation>&Кирилиця (CP1251)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="847"/>
+        <source>Cyrillic (&KOI8-U)</source>
+        <translation>Кирилиця (&KOI8-U)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="858"/>
+        <source>Cyrillic (&ISO-8859-5)</source>
+        <translation>Кирилиця (&ISO-8859-5)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="869"/>
+        <source>&Chinese (BIG5)</source>
+        <translation>&Китайська (BIG5)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="880"/>
+        <source>Chinese (&GB18030)</source>
+        <translation>Китайська (&GB18030)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="891"/>
+        <source>&Japanese (ISO-2022-JP)</source>
+        <translation>&Японська (ISO-2022-JP)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="902"/>
+        <source>Japanese (&ISO-2022-JP-2)</source>
+        <translation>Японська (&ISO-2022-JP-2)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="913"/>
+        <source>Japanese (ISO-&2022-KR)</source>
+        <translation>Японська (ISO-&2022-KR)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="924"/>
+        <source>Ja&panese (CP932)</source>
+        <translation>Я&понська (CP932)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="935"/>
+        <source>Japa&nese (EUC-JP)</source>
+        <translation>Япо&нська (EUC-JP)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="943"/>
+        <source>&Korean (CP949)</source>
+        <translation>К&орейська (CP949)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="951"/>
+        <source>K&orean (CP1361)</source>
+        <translation>К&орейська (CP1361)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="959"/>
+        <source>Korean (&EUC-KR)</source>
+        <translation>Корейська (&EUC-KR)</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1005"/>
+        <source>ISO-&8859-15</source>
+        <translation>ISO-&8859-15</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1025"/>
+        <source>Close &Other Tabs</source>
+        <translation>Закрити &інші вкладки</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1030"/>
+        <source>&Copy File Name</source>
+        <translation>&Копіювати назву файлу</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1035"/>
+        <source>Copy File &Path</source>
+        <translation>Копіювати &шлях до файлу</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1046"/>
+        <source>Alt+Right</source>
+        <translation>Alt+Right</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1057"/>
+        <source>Alt+Left</source>
+        <translation>Alt+Left</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1065"/>
+        <source>&First Tab</source>
+        <translation>&Перша вкладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1068"/>
+        <source>Alt+Down</source>
+        <translation>Alt+Down</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1076"/>
+        <source>&Last Tab</source>
+        <translation>&Остання вкладка</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1079"/>
+        <source>Alt+Up</source>
+        <translation>Alt+Up</translation>
+    </message>
+    <message>
+        <location filename="../../fp.ui" line="1084"/>
+        <source>Menu</source>
+        <translation>Меню</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="97"/>
+        <source>Calculate number of words
+(For huge texts, this may be CPU-intensive.)</source>
+        <translation>Обчислити кількість слів
+(Для великих текстів це може сильно навантажити процесор.)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="112"/>
+        <source>Next</source>
+        <translation>Наступна</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="113"/>
+        <source>Previous</source>
+        <translation>Попередня</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="114"/>
+        <source>Replace all</source>
+        <translation>Замінити всі</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="593"/>
+        <source>&Recently Opened</source>
+        <translation>&Остання відкрита</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1917"/>
+        <source>Close</source>
+        <translation>Закрити</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1242"/>
+        <source>Save changes?</source>
+        <translation>Зберегти зміни?</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="894"/>
+        <source>Please attend to that window or just close its dialog!</source>
+        <translation>Перейдіть до цього вікна або просто закрийте його діалогове вікно!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1246"/>
+        <source>The document has been modified.</source>
+        <translation>Документ було змінено.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1257"/>
+        <source>&Discard changes</source>
+        <translation>&Відкинути зміни</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1258"/>
+        <source>&Cancel</source>
+        <translation>&Скасувати</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1260"/>
+        <source>&No to all</source>
+        <translation>&Не для всіх</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
+        <source>Unsaved</source>
+        <translation>Незбережене</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
+        <source>Lines</source>
+        <translation>Рядки</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
+        <source>Sel. Chars</source>
+        <translation>Вибр. символи</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
+        <source>Words</source>
+        <translation>Слова</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1800"/>
+        <source>Another process is running in this tab!</source>
+        <translation>Інший процес запущений у цій вкладці!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1908"/>
+        <source>Script File</source>
+        <translation>Файл скрипту</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="893"/>
+        <source>Another FeatherPad window has a modal dialog!</source>
+        <translation>Для іншого вікна FeatherPad відкрито модальне вікно!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
+        <source>Position:</source>
+        <translation>Позиція:</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
+        <source>Normal</source>
+        <translation>Звичайна</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
+        <source>The file does not exist.</source>
+        <translation>Файлу не існує.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1613"/>
+        <source>Open Link</source>
+        <translation>Відкрити посилання</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1626"/>
+        <source>Copy Link</source>
+        <translation>Скопіювати посилання</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1801"/>
+        <source>Only one process is allowed per tab.</source>
+        <translation>Лише один процес дозволений у вкладці.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1904"/>
+        <source>Script Output</source>
+        <translation>Вивід скрипту</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="1920"/>
+        <source>Clear</source>
+        <translation>Очистити</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2546"/>
+        <source>FeatherPad does not open files larger than 100 MiB.</source>
+        <translation>FeatherPad не відкриває файли більші за 100 МіБ.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2554"/>
+        <source>Non-text file(s) not opened!</source>
+        <translation>Не текстові файли не відкриваються!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2555"/>
+        <source>See Preferences → Files → Do not permit opening of non-text files</source>
+        <translation>Перегляньте Налаштування → Файли → Не дозволяти відкриття не текстових файлів</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2564"/>
+        <source>Some file(s) could not be opened!</source>
+        <translation>Не можливо відкрити деякі файли!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2565"/>
+        <source>You may not have the permission to read.</source>
+        <translation>Можливо, у вас немає дозволу на читання.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2575"/>
+        <source>Uneditable file(s)!</source>
+        <translation>Незмінювані файли!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2576"/>
+        <source>Non-text files or files with huge lines cannot be edited.</source>
+        <translation>Нетекстові файли або файли з великими рядками не можна редагувати.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2640"/>
+        <source>A previous crash detected!</source>
+        <translation>Виявлено попередні збої!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2641"/>
+        <source>Preferably, close all FeatherPad windows and start again!</source>
+        <translation>Бажано закрити всі вікна FeatherPad і почати знову!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2649"/>
+        <source>Root Instance</source>
+        <translation>Кореневий екземпляр</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
+        <source>All Files (*)</source>
+        <translation>Усі файли (*)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2726"/>
+        <source>All Files (*);;.%1 Files (*.%1)</source>
+        <translation>Усі файли (*);;.%1 Файли (*.%1)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2730"/>
+        <source>Open file...</source>
+        <translation>Відкрити файл...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2900"/>
+        <source>.%1 Files (*.%1);;All Files (*)</source>
+        <translation>.%1 Файлів (*.%1);;Усі файли (*)</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
+        <source>Save as...</source>
+        <translation>Зберегти як...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3025"/>
+        <source>Keep encoding and save as...</source>
+        <translation>Залишити поточне кодування та зберегти як...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3297"/>
+        <source>Saving as root.</source>
+        <translation>Збереження кореневим.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3298"/>
+        <source>Waiting for authentication...</source>
+        <translation>Очікування автентифікації...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3418"/>
+        <source>"pkexec" is not found. Please install Polkit!</source>
+        <translation>«pkexec» не знайдено. Встановіть Polkit!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3106"/>
+        <source>Yes</source>
+        <translation>Так</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3107"/>
+        <source>No</source>
+        <translation>Ні</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3108"/>
+        <source>Cancel</source>
+        <translation>Скасувати</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3109"/>
+        <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
+        <translation>Ви хочете використовувати кінці рядків <b>MS Windows</b>?</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3110"/>
+        <source>This may be good for readability under MS Windows.</source>
+        <translation>Це може бути добре для читання в MS Windows.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
+        <source>Cannot be saved!</source>
+        <translation>Неможливо зберегти!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
+        <source>Help</source>
+        <translation>Довідка</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
+        <source>Syntax</source>
+        <translation>Синтаксис</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="2545"/>
+        <source>Huge file(s) not opened!</source>
+        <translation>Великі файли не відкриваються!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3573"/>
+        <source>Text tabs are converted to spaces.</source>
+        <translation>Текстові табулятори змінені на пробіли.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3675"/>
+        <source>The selected text was too long.</source>
+        <translation>Вибраний текст був надто довгим.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3676"/>
+        <source>It is not fully processed.</source>
+        <translation>Не повністю оброблено.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
+        <source>This file has been modified elsewhere or in another way!</source>
+        <translation>Цей файл був змінений в іншому місці або іншим способом!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
+        <source>Please be careful about reloading or saving this document!</source>
+        <translation>Будьте обережні, перезавантажуючи або зберігаючи цей документ!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4484"/>
+        <source>Printing in progress...</source>
+        <translation>Друкується...</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4535"/>
+        <source>Print Document</source>
+        <translation>Друкувати документ</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="4541"/>
+        <source>Printing completed.</source>
+        <translation>Друкування виконано.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
+        <source>%1 Pages</source>
+        <translation>%1 сторінок</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
+        <source>Copy Target Path</source>
+        <translation>Скопіювати шлях до цілі</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
+        <source>Open Target Here</source>
+        <translation>Відкрити ціль тут</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>Скопіювати шлях до кінцевої цілі</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>Відкрити фінальну ціль тут</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
+        <source>Open Containing Folder</source>
+        <translation>Відкрити теку, що містить</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5495"/>
+        <source>You need to add a Hunspell dictionary.</source>
+        <translation>Вам потрібно додати словник Hunspell.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
+        <source>See Preferences → Text → Spell Checking!</source>
+        <translation>Перегляньте Налаштування → Текст → Перевірка правопису!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5502"/>
+        <source>The Hunspell dictionary does not exist.</source>
+        <translation>Словника Hunspell не існує.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5512"/>
+        <source>The Hunspell dictionary is not accompanied by an affix file.</source>
+        <translation>Словник Hunspell не супроводжується додатковим файлом.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
+        <source>No misspelling in document.</source>
+        <translation>У документі немає помилок.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
+        <source>No misspelling from text cursor.</source>
+        <translation>Немає помилок у тексті після курсора.</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5586"/>
+        <source>Spell Checking</source>
+        <translation>Перевірка правопису</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5923"/>
+        <source>Some files cannot be saved!</source>
+        <translation>Деякі файли неможливо зберегти!</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <source>Translators</source>
+        <translation>Перекладачі</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5966"/>
+        <source>A lightweight, tabbed, plain-text editor</source>
+        <translation>Легкий текстовий редактор з вкладками</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5967"/>
+        <source>based on Qt</source>
+        <translation>заснований на Qt</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5968"/>
+        <source>Author</source>
+        <translation>Автор</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5969"/>
+        <source>aka.</source>
+        <translation>псевдонім</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
+        <source>About FeatherPad</source>
+        <translation>Про FeatherPad</translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="242"/>
+        <source>No Replacement</source>
+        <translation>Без заміни</translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="244"/>
+        <source>One Replacement</source>
+        <translation>Одна заміна</translation>
+    </message>
+    <message numerus="yes">
+        <location filename="../../replace.cpp" line="246"/>
+        <source>%Ln Replacements</source>
+        <translation>
+            <numerusform>%Ln заміна</numerusform>
+            <numerusform>%Ln заміни</numerusform>
+            <numerusform>%Ln замін</numerusform>
+        </translation>
+    </message>
+    <message>
+        <location filename="../../replace.cpp" line="250"/>
+        <source>The first 1000 replacements are highlighted.</source>
+        <translation>Перші 1000 замін буде підсвічено.</translation>
+    </message>
+    <message>
+        <location filename="../../syntax.cpp" line="298"/>
+        <source>The size limit for syntax highlighting is exceeded.</source>
+        <translation>Перевищено обмеження розміру підсвічування синтаксису.</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FileDialog</name>
+    <message>
+        <location filename="../../filedialog.h" line="49"/>
+        <source>Ctrl+H</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation>Ctrl+H</translation>
+    </message>
+    <message>
+        <location filename="../../filedialog.h" line="50"/>
+        <source>Alt+.</source>
+        <comment>Toggle showing hidden files</comment>
+        <translation>Alt+.</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::FontDialog</name>
+    <message>
+        <location filename="../../fontDialog.ui" line="14"/>
+        <source>Select Font</source>
+        <translation>Вибір шрифту</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="38"/>
+        <source>Programming Fonts</source>
+        <translation>Власні шрифти</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="45"/>
+        <location filename="../../fontDialog.ui" line="55"/>
+        <source>Font:</source>
+        <translation>Шрифт:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="69"/>
+        <source>Size:</source>
+        <translation>Розмір:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="89"/>
+        <source>Weight:</source>
+        <translation>Насиченість:</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="103"/>
+        <source>Normal</source>
+        <translation>Звичайний</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="108"/>
+        <source>Medium</source>
+        <translation>Напівжирний</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="113"/>
+        <source>Bold</source>
+        <translation>Жирний</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="118"/>
+        <source>Black</source>
+        <translation>Наджирний</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="126"/>
+        <source>Italic</source>
+        <translation>Курсив</translation>
+    </message>
+    <message>
+        <location filename="../../fontDialog.ui" line="149"/>
+        <source>Preview</source>
+        <translation>Перегляд</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::LineEdit</name>
+    <message>
+        <location filename="../../lineedit.cpp" line="34"/>
+        <source>Clear text (Ctrl+K)</source>
+        <translation>Очистити текст (Ctrl+K)</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::PrefDialog</name>
+    <message>
+        <location filename="../../prefDialog.ui" line="14"/>
+        <source>Preferences</source>
+        <translation>Налаштування</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="30"/>
+        <source>Window</source>
+        <translation>Вікно</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="69"/>
+        <source>Window Settings</source>
+        <translation>Налаштування вікна</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="75"/>
+        <source>Remember window &size on closing</source>
+        <translation>Запам'ятовувати &розмір вікна під час закриття</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="84"/>
+        <location filename="../../prefDialog.ui" line="97"/>
+        <location filename="../../prefDialog.ui" line="107"/>
+        <location filename="../../prefDialog.ui" line="120"/>
+        <source>Window frame is excluded.</source>
+        <translation>Обрамлення вікна вимкнено.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="87"/>
+        <source>Start with this size: </source>
+        <translation>Розпочинати з розміром: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="100"/>
+        <location filename="../../prefDialog.ui" line="123"/>
+        <source> px</source>
+        <translation> px</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="110"/>
+        <source>×</source>
+        <translation>×</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="148"/>
+        <source>Enforcing a window position is not recommended
+and may not work with some window managers.</source>
+        <translation>Примусове розташування вікна не рекомендується
+і може не працювати з деякими менеджерами вікон.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="152"/>
+        <source>Remember window &position on closing</source>
+        <translation>Запам'ятовувати р&озташування вікна під час закриття</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="159"/>
+        <source>Most suitable with sessions
+but without tab functionality.</source>
+        <translation>Найкраще підходить для сеансів
+але без функціональності вкладки.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="188"/>
+        <source>Uncheck for 1/5 of the width.</source>
+        <translation>Приберіть позначку, щоб застосувати 1/5 ширини.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="191"/>
+        <source>Remember splitter position</source>
+        <translation>Запам'ятовувати розташування розділювача</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="200"/>
+        <source>Do not show &toolbar</source>
+        <translation>Не показувати панель &інструментів</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="207"/>
+        <source>If the menubar is hidden,
+a menu button appears on the toolbar.</source>
+        <translation>Якщо панель меню схована, на панелі
+інструментів з'являється кнопка меню.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="211"/>
+        <source>Do not show &menubar</source>
+        <translation>Не показувати панель &меню</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>Прискорювачі панелі меню активуються клавішею
+Alt і можуть перекривати налаштовані комбінації клавіш.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>Вимкнути прискорювачі панелі меню</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
+        <source>Hide search &bar by default</source>
+        <translation>Типово ховати &панель пошуку</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="236"/>
+        <source>By default, each search entry
+has a separate search history.</source>
+        <translation>Типово кожне поле пошуку
+має окрему історію пошуку.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="240"/>
+        <source>Use a shared search history</source>
+        <translation>Використовувати спільну історію пошуку</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="247"/>
+        <source>Always show st&atus bar</source>
+        <translation>Завжди показувати панель ст&ану</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="272"/>
+        <source>Show cursor position on status bar</source>
+        <translation>Показувати розташування курсора на панелі стану</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
+        <source>Will take effect after closing this dialog.</source>
+        <translation>Зміни наберуть чинності після закриття діалогового вікна.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="286"/>
+        <source>Tab position: </source>
+        <translation>Розташування вкладки: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="297"/>
+        <source>North</source>
+        <translation>Вгорі</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="302"/>
+        <source>South</source>
+        <translation>Внизу</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="307"/>
+        <source>West</source>
+        <translation>Ліворуч</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="312"/>
+        <source>East</source>
+        <translation>Праворуч</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="338"/>
+        <source>This means that, for LTR, Alt+Right goes to the first tab
+after the last tab is activated, and the same for Alt+Left.
+
+Tab navigation with mouse wheel is not affected.</source>
+        <translation>Це означає, що для режиму зліва на право, Alt+стрілка праворуч переходить до
+першої вкладки після активації останньої вкладки, те ж саме для Alt+ліворуч.
+
+Навігація вкладками за допомогою коліщатка миші не впливає на це.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="344"/>
+        <source>Tab navigation wraps &around</source>
+        <translation>Навігація вкладками відбувається по &колу</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="364"/>
+        <source>Close window on closing its last tab</source>
+        <translation>Закрити вікно після закриття останньої вкладки</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="371"/>
+        <source>By default, if a FeatherPad window exists on the
+current desktop, files will be opened in its tabs.
+
+However, some desktop environments may not
+report that they have multiple desktops.</source>
+        <translation>Типово, якщо вікно FeatherPad існує на поточній стільниці,
+файли будуть відкриватися на його вкладках.
+
+Однак деякі стільничні середовища можуть не
+повідомляти, що в них є кілька стільниць.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="378"/>
+        <source>Always open in separate windows</source>
+        <translation>Завжди відкривати в окремих вікнах</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="385"/>
+        <source>If this is checked, the file dialog provided by the current
+desktop environment will be used instead of the Qt file dialog.
+
+Some desktop environments, like KDE and LXQt, provide files dialogs.</source>
+        <translation>Якщо це позначено, діалогове вікно файлу надане поточним стільничним
+середовищем використовуватиметься замість діалогового вікна файлу Qt.
+
+Деякі стільничні середовища, наприклад KDE та LXQt, надають діалогові вікна файлів.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="391"/>
+        <source>Native file dialog</source>
+        <translation>Системні діалогові вікна</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="467"/>
+        <source>Uncheck for Monospace.</source>
+        <translation>Прибрати позначку, щоб застосувати Monospace.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="470"/>
+        <source>Remember &font</source>
+        <translation>Запам'ятати шр&ифт</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="491"/>
+        <source>This covers parentheses, braces, brackets and quotes.</source>
+        <translation>Це охоплює круглі, фігурні й квадратні дужки та лапки.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="494"/>
+        <source>Auto-&bracket</source>
+        <translation>Авт&одужки</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="501"/>
+        <source>By default, a triple period is replaced with an ellipsis
+and a double hyphen with a long dash while typing,
+under proper circumstances.</source>
+        <translation>Типово трикрапка замінюється на еліпсис,
+а подвійний дефіс на довге тире під час введення тексту,
+за належних обставин.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="506"/>
+        <source>Replace triple periods and double hyphens while typing</source>
+        <translation>Замінювати трикрапки та подвійні дефіси під час введення тексту</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="520"/>
+        <source>Highlight case-sensitive and whole matches
+of the selected text.</source>
+        <translation>Виділяти чутливі до регістру і точні
+збіги вибраного тексту.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="524"/>
+        <source>Selection highlighting</source>
+        <translation>Підсвічування вибору</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="587"/>
+        <source>Never highlight syntax for files > </source>
+        <translation>Не підсвічувати синтаксис для файлів > </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="556"/>
+        <source>This creates a menu button on the
+status bar for changing the syntax.</source>
+        <translation>Цим створюється кнопка меню
+на панелі стану для зміни синтаксису.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="560"/>
+        <source>Support syntax override</source>
+        <translation>Підтримка заміни синтаксису</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="625"/>
+        <source>Show spaces, tabs and tab lines
+when the syntax is highlighted.</source>
+        <translation>Показувати пробіли, табуляцію та перенесення
+рядків, якщо увімкнено підсвічування синтаксису.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="629"/>
+        <source>Show whitespaces</source>
+        <translation>Показувати пробіли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
+        <source>The vertical position lines will be drawn only if
+the editor font has a fixed pitch (like Monospace).</source>
+        <translation>Вертикальні лінії позиціювання будуть проведені лише якщо
+шрифт редактора має фіксовану висоту (як-от Monospace).</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="649"/>
+        <source>Show vertical lines starting from this position:</source>
+        <translation>Показувати вертикальні лінії, починаючи з цієї позиції:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="636"/>
+        <source>Also show line and document ends</source>
+        <translation>Також показувати лінії закінчення рядків і документів</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="775"/>
+        <source>Date and time format:</source>
+        <translation>Формат дати й часу:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="845"/>
+        <source>Some text editors cannot open a document
+whose last line is not empty.</source>
+        <translation>Деякі текстові редактори не можуть відкрити
+документ останній рядок якого не порожній.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="849"/>
+        <source>Ensure an empty last line on saving</source>
+        <translation>Перевіряти чи не порожній останній рядок під час збереження</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="856"/>
+        <source>Remove trailing spaces on saving</source>
+        <translation>Вилучати кінцеві пробіли під час збереження</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="874"/>
+        <source>Inertial scrolling with mouse wheel</source>
+        <translation>Плавне прокручування колесом миші</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="963"/>
+        <source>Files</source>
+        <translation>Файли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="969"/>
+        <source>File Management</source>
+        <translation>Керування файлами</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1086"/>
+        <source>Start with files of last window</source>
+        <translation>Починати з файлами з останнього вікна</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
+        <source>This can be any starting command with
+arguments, for example, "xterm -hold"
+for running the process in XTerm.
+
+If the command is left empty, the file
+will be executed directly.
+
+If the script is not run in a terminal
+emulator, the output and error messages
+will be shown by a popup dialog.</source>
+        <translation>Це може бути будь-яка команда запуску
+з аргументами, наприклад, «xterm-hold»
+для запуску процесу в XTerm.
+
+Якщо команда залишається порожньою,
+файл буде запущено безпосередньо.
+
+Якщо скрипт не запускається емуляторі
+терміналу, вихідні та повідомлення про
+помилки буде показано у спливному вікні.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1140"/>
+        <source>Start with this command: </source>
+        <translation>Починати з команди: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1159"/>
+        <source>Command + Arguments</source>
+        <translation>Команда та аргументи</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1044"/>
+        <source>Show recentl&y modified files</source>
+        <translation>Показувати останні змінені файли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1074"/>
+        <source>Show recentl&y opened files</source>
+        <translation>Показати останн&і відкриті файли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1173"/>
+        <source>Save changes to opened files every:</source>
+        <translation>Зберігати зміни у відкритих файлах кожні:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1439"/>
+        <source>Help</source>
+        <translation>Довідка</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="163"/>
+        <source>Start with side-pane mode</source>
+        <translation>Починати з боковою панеллю</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="351"/>
+        <source>If this is checked, not only you will lose the informative
+tooltip and context menu of a single tab but you could not
+merge a single tabbed window into another one by tab drag-
+and-drop either.</source>
+        <translation>Якщо цю опцію вибрано, ви не лише втратите інформативні
+підказки та контекстне меню однієї вкладки, але й не зможете
+об’єднати одне вікно з вкладками з іншим перетягуванням
+вкладки.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="357"/>
+        <source>&Do not show a single tab</source>
+        <translation>&Не показувати єдину вкладку</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="422"/>
+        <source>Text</source>
+        <translation>Текст</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="461"/>
+        <source>Text Editor</source>
+        <translation>Текстовий редактор</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="477"/>
+        <source>&Wrap lines by default</source>
+        <translation>Типово діє &перенесення рядків</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="484"/>
+        <source>Auto-&indent by default</source>
+        <translation>Типово діє А&втоабзацування</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="513"/>
+        <source>Always show line &numbers</source>
+        <translation>Завжди показувати &нумерацію рядків</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="531"/>
+        <source>Highlight s&yntax by default</source>
+        <translation>Типово діє п&ідсвічування синтаксису</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="691"/>
+        <source>Dark c&olor scheme</source>
+        <translation>Темна к&олірна схема</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="726"/>
+        <source>Background color value: </source>
+        <translation>Колір тла: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="594"/>
+        <source> MiB</source>
+        <translation> МіБ</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1093"/>
+        <source>This only includes executable files written
+in script languages like Shell and Python.
+
+If it is checked and the opened file is
+executable, the file will be executed by clicking
+the Run button, that appears on the toolbar/filemenu
+when needed, or by its shortcut Ctrl+E. Then, the
+process could be killed by Ctrl+Alt+E.</source>
+        <translation>Це включає лише виконувані файли написані
+скриптовими мовами, як-от Shell і Python.
+
+Якщо позначено і відкритий файл є виконуваним,
+його буде виконано натисканням кнопки «Запустити»,
+яка з'являється на панелі інструментів/меню файлів
+за потреби або за допомогою комбінації клавіш Ctrl+E. Тоді,
+процес можна вбити за допомогою Ctrl+Alt+E.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="688"/>
+        <source>Needs window reopening to take effect.</source>
+        <translation>Для набрання чинності обов'язковий перезапуск вікна.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
+        <source>The color value of the background.
+255 means white while 0 means black.
+
+For the light background, it can be
+between 230 and 255; for the dark
+background, between 0 and 50.
+
+Needs window reopening to take effect.</source>
+        <translation>Числове значення кольору тла.
+255 означає білий, 0 — чорний.
+
+Для світлого тла може приймати
+значення між 230 та 255;
+для темного тла — між 0 та 50. 
+
+Для набрання чинності обов'язковий перезапуск вікна.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1103"/>
+        <source>Run executable scripts</source>
+        <translation>Запустити виконуваний скрипт</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
+        <source>The maximum number of recently modified or
+opened files FeatherPad shows. The default
+is 10.
+
+Needs application restart to take effect.</source>
+        <translation>Найбільша кількість нещодавно змінених
+або відкритих файлів, які показує FeatherPad. 
+Типово 10.
+
+Для набрання чинності обов'язковий перезапуск програми.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
+        <source>Used for pasting the date and time.
+
+Takes effect after closing this dialog.
+
+Leave empty for:
+MMM dd, yyyy, hh:mm:ss</source>
+        <translation>Використовується для вставлення дати й часу.
+
+Набирає чинності після закриття діалогового вікна.
+
+Залиште пустим для формату:
+гру 31, 1999, 23:59:59</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="804"/>
+        <source>Text tab size:</source>
+        <translation>Розмір текстової табуляції:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="811"/>
+        <source> spaces</source>
+        <translation> пробіли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="863"/>
+        <source>Thick text cursor</source>
+        <translation>Товстий курсор</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="870"/>
+        <source>Should the mouse wheel scrolling be inertial
+if the cursor is inside the text view?</source>
+        <translation>Чи має бути плавним прокручування колесом миші,
+якщо курсор знаходиться всередині текстового подання?</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="881"/>
+        <source>Spell Checking</source>
+        <translation>Перевірка правопису</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
+        <source>A Hunspell dictionary has a name that ends with ".dic"
+and should be alongside an affix file with the same
+name but ending with ".aff".</source>
+        <translation>Словник Hunspell має назву із розширенням
+«.dic» та має бути поряд з додатковим файлом з тією
+ж назвою, але з розширенням «.aff».</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="894"/>
+        <source>Hunspell dictionary path:</source>
+        <translation>Шлях до словника Hunspell:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
+        <source>Add dictionary...</source>
+        <translation>Додати словник...</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="925"/>
+        <source>If this is unchecked, spell checking
+will be started from the document start.</source>
+        <translation>Якщо не вибрано, перевірку правопису
+буде розпочато від початку документу.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="929"/>
+        <source>Start spell checking from text cursor</source>
+        <translation>Почати перевірку правопису від курсора</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="984"/>
+        <source>Number of recent files: </source>
+        <translation>Кількість нещодавніх файлів: </translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1083"/>
+        <source>Only if their number is not greater than 50.</source>
+        <translation>Тільки якщо їх кількість не перевищує 50.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
+        <source>Only for files that exist and can be saved.</source>
+        <translation>Тільки для файлів, які існують та можуть бути збережені.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1183"/>
+        <source> min</source>
+        <translation> мін</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1214"/>
+        <source>If this is checked, the Save button/menu-item could
+be used also when the opened file is not modified.
+
+This can be useful under certain circumstances,
+e.g. for changing the time stamp or removing the
+trailing spaces of a text file.</source>
+        <translation>Якщо позначено, кнопка Зберегти/пункт меню також може
+бути використана, якщо відкритий файл не змінюється.
+
+Це може бути корисним за певних обставин,
+наприклад для зміни позначки часу або вилучення
+кінцевих пробілів текстового файлу.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1222"/>
+        <source>Allow saving unmodified files</source>
+        <translation>Дозволити збереження незмінених файлів</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1229"/>
+        <source>Show a warning instead.</source>
+        <translation>Натомість показувати попередження.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1232"/>
+        <source>Do not permit opening of non-text files</source>
+        <translation>Не дозволяти відкривати нетекстові файли</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1239"/>
+        <source>By default, when files are copied, they will
+be opened if they are pasted into FeatherPad.</source>
+        <translation>Типово, під час копіювання файлів, вони будуть
+відкриті, якщо їх вставлено у FeatherPad.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1243"/>
+        <source>Paste paths instead of files</source>
+        <translation>Вставляння шляхів замість файлів</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1270"/>
+        <source>Shortcuts</source>
+        <translation>Комбінації клавіш</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1289"/>
+        <source>Action</source>
+        <translation>Дія</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1294"/>
+        <source>Shortcut</source>
+        <translation>Комбінація клавіш</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1302"/>
+        <source>Restore default shortcuts.</source>
+        <translation>Відновити типові комбінації клавіш.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
+        <source>Default</source>
+        <translation>Типові комбінації</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1316"/>
+        <source>Syntax Colors</source>
+        <translation>Кольори синтаксису</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1332"/>
+        <source>Element</source>
+        <translation>Елемент</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1337"/>
+        <source>Text Color</source>
+        <translation>Колір тексту</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1350"/>
+        <source>Whitespace color value:</source>
+        <translation>Колір пробілу:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
+        <source>Has effect only if line numbers are shown.</source>
+        <translation>Діє лише за умови показу номерів рядків.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1383"/>
+        <source>Current line highlight value:</source>
+        <translation>Колір підсвічування поточного рядка:</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1415"/>
+        <source>Restore default syntax colors.</source>
+        <translation>Відновити типові кольори.</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="1450"/>
+        <source>Close</source>
+        <translation>Закрити</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="104"/>
+        <source>Press a modifier key to clear a shortcut
+in the editing mode.</source>
+        <translation>Натисніть клавішу-модифікатор, щоб очистити
+комбінацію клавіш у режимі редагування.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="110"/>
+        <source>Double click a color to change it.</source>
+        <translation>Двічі клацніть на колір, щоб змінити його.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>files</source>
+        <translation>файли</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
+        <source>file</source>
+        <translation>файл</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
+        <source>Warning: Ambiguous shortcut detected!</source>
+        <translation>Попередження: виявлено двозначну комбінацію клавіш!</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="392"/>
+        <source>Functions, URLs,…</source>
+        <translation>Функції, URL-адреси,…</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="393"/>
+        <source>Built-in Functions</source>
+        <translation>Вбудовані функції</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="394"/>
+        <source>Comments</source>
+        <translation>Коментарі</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="395"/>
+        <source>Quotations</source>
+        <translation>Цитати</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="396"/>
+        <source>Types</source>
+        <translation>Типи</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="397"/>
+        <source>Key Words</source>
+        <translation>Ключові слова</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="398"/>
+        <source>Numbers</source>
+        <translation>Цифри</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="399"/>
+        <source>Regular Expressions, Code Blocks,…</source>
+        <translation>Регулярні вирази, кодові блоки,…</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="400"/>
+        <source>Document Blocks, XML/HTML Elements,…</source>
+        <translation>Блоки документів, XML/HTML-елементи,…</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="401"/>
+        <source>Markdown Headings, CSS Values,…</source>
+        <translation>Заголовки Markdown, значення CSS,…</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="402"/>
+        <source>Extra Elements</source>
+        <translation>Додаткові елементи</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="563"/>
+        <source>Application restart is needed for changes to take effect.</source>
+        <translation>Для набрання чинності потрібен перезапуск програми.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="582"/>
+        <source>Window reopening is needed for changes to take effect.</source>
+        <translation>Для набрання чинності потрібен перезапуск вікна.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1370"/>
+        <source>&Recently Opened</source>
+        <translation>Нед&авно відкриті</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1371"/>
+        <source>Recently &Modified</source>
+        <translation>Н&едавно змінені</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1446"/>
+        <source>The typed shortcut was reserved.</source>
+        <translation>Введену комбінацію клавіш зарезервовано.</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="1650"/>
+        <source>Hunspell Dictionary Files (*.dic)</source>
+        <translation>Файли словника Hunspell (*.dic)</translation>
+    </message>
+    <message>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
+        <source>Select Syntax Color</source>
+        <translation>Вибрати колір синтаксису</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SearchBar</name>
+    <message>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
+        <source>Search...</source>
+        <translation>Шукати...</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="125"/>
+        <source>Match Case</source>
+        <translation>Збіг регістру</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="132"/>
+        <source>Whole Word</source>
+        <translation>Слово цілком</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="139"/>
+        <source>Regular Expression</source>
+        <translation>Регулярний вираз</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="171"/>
+        <source>Search with regex...</source>
+        <translation>Пошук за допомогою регулярного виразу...</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="120"/>
+        <source>Next</source>
+        <translation>Наступне</translation>
+    </message>
+    <message>
+        <location filename="../../searchbar.cpp" line="121"/>
+        <source>Previous</source>
+        <translation>Попереднє</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SessionDialog</name>
+    <message>
+        <location filename="../../sessionDialog.ui" line="14"/>
+        <source>Session Manager</source>
+        <translation>Менеджер сеансів</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="101"/>
+        <location filename="../../sessionDialog.ui" line="270"/>
+        <source>&Remove</source>
+        <translation>&Вилучити</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="33"/>
+        <source><b>Save/Restore Session</b></source>
+        <translation><b>Зберегти/відновити сеанс</b></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="56"/>
+        <source>Filter...</source>
+        <translation>Фільтр...</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="69"/>
+        <source>Open the selected session(s).</source>
+        <translation>Відкрити вибраний сеанс(и).</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="72"/>
+        <location filename="../../sessionDialog.ui" line="275"/>
+        <source>&Open</source>
+        <translation>&Відкрити</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="98"/>
+        <location filename="../../sessionDialog.ui" line="108"/>
+        <source>Del</source>
+        <translation>Del</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="115"/>
+        <location filename="../../sessionDialog.ui" line="125"/>
+        <source>Ctrl+Del</source>
+        <translation>Ctrl+Del</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="159"/>
+        <source>By default, all files that are opened in all
+windows will be included in the saved session.</source>
+        <translation>Типово усі файли, які відкрито у всіх
+вікнах будуть включені до збереженого сеансу.</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="163"/>
+        <source>Save only from this &window</source>
+        <translation>Зберегти лише з цього в&ікна</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="180"/>
+        <source><b>Warning</b></source>
+        <translation><b>Попередження</b></translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="226"/>
+        <location filename="../../session.cpp" line="328"/>
+        <source>&Yes</source>
+        <translation>&Так</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="233"/>
+        <source>&No</source>
+        <translation>&Ні</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="283"/>
+        <source>Re&name</source>
+        <translation>Пере&йменувати</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="118"/>
+        <source>Remove &All</source>
+        <translation>Видалити в&се</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="260"/>
+        <source>&Close</source>
+        <translation>Закр&ити</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="135"/>
+        <source>Save the current session under the given title.</source>
+        <translation>Зберегти поточний сеанс із цією назвою.</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="138"/>
+        <source>&Save</source>
+        <translation>З&берегти</translation>
+    </message>
+    <message>
+        <location filename="../../sessionDialog.ui" line="149"/>
+        <source>Type a name to save session</source>
+        <translation>Уведіть назву для збереження сеансу</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="179"/>
+        <source>Nothing saved.<br>No file was opened.</source>
+        <translation>Сеанс не збережено.<br>Жодного файлу не відкрито.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="277"/>
+        <source>No file exists or can be opened.</source>
+        <translation>Файл не існує або його не можна відкрити.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="279"/>
+        <source>Not all files exist or can be opened.</source>
+        <translation>Не всі файли існують або їх не можна відкрити.</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="314"/>
+        <source>&OK</source>
+        <translation>&Гаразд</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="333"/>
+        <source>Do you really want to remove all saved sessions?</source>
+        <translation>Ви справді бажаєте вилучити всі збережені сеанси?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="339"/>
+        <source>Do you really want to remove the selected sessions?</source>
+        <translation>Ви справді бажаєте вилучити вибраний сеанс?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="341"/>
+        <source>Do you really want to remove the selected session?</source>
+        <translation>Ви справді бажаєте вилучити всі обрані сеанси?</translation>
+    </message>
+    <message>
+        <location filename="../../session.cpp" line="346"/>
+        <source>A session with the same name exists.<br>Do you want to overwrite it?</source>
+        <translation>Сеанс із такою назвою вже існує.<br>Бажаєте замінити його?</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SidePane</name>
+    <message>
+        <location filename="../../sidepane.cpp" line="196"/>
+        <source>Filter...</source>
+        <translation>Фільтр...</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::SpellDialog</name>
+    <message>
+        <location filename="../../spellDialog.ui" line="25"/>
+        <source>Unknown word:</source>
+        <translation>Невідоме слово:</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="51"/>
+        <source>Add To Dictionary</source>
+        <translation>Додати до словника</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="62"/>
+        <source>Replace with:</source>
+        <translation>Замінити на:</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="129"/>
+        <source>Correct Once</source>
+        <translation>Виправити</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="142"/>
+        <source>Correct All</source>
+        <translation>Виправити всі</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="87"/>
+        <source>Ignore Once</source>
+        <translation>Пропустити</translation>
+    </message>
+    <message>
+        <location filename="../../spellDialog.ui" line="100"/>
+        <source>Ignore All</source>
+        <translation>Пропустити всі</translation>
+    </message>
+</context>
+<context>
+    <name>FeatherPad::TextEdit</name>
+    <message>
+        <location filename="../../textedit.cpp" line="147"/>
+        <source>Double click to center current line</source>
+        <translation>Центрувати поточний рядок подвійним клацанням</translation>
+    </message>
+</context>
+</TS>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_zh_CN.ts featherpad-1.0.1/featherpad/data/translations/featherpad_zh_CN.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_zh_CN.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_zh_CN.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>许可</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>无标题</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>选项(&O)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>编码</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>保存(&S)</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>替换</translation>
     </message>
@@ -799,461 +799,473 @@
         <translation>替换所有</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>最近打开的文件(&R)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>关闭</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>是否保存更改?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation>请转到那个窗口或关闭其对话框!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>文档已更改。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>抛弃更改(&D)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>取消(&C)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>全不(&N)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>未保存</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>行</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>选区</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>字</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>另外的进程正在此标签内运行!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>脚本文件</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation>另外的 FeatherPad 窗口弹出了对话框!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>位置:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>常规</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>该文件不存在。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>打开链接</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>复制链接</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>每个标签只允许一个进程。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>脚本输出</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>清除</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad 不能打开大于 100 MiB 的文件。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation>空文本文件没有打开!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation>查看 属性 → 文件 → 不允许打开空的文本文件</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>无法打开某些文件!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>您可能没有读取权限。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>文件不可编辑!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>无法编辑非文本文件或行数太多的文件。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>检测到前次崩溃!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation>建议关闭所有 FeatherPad 窗口并重新启动本程序!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation>根实例</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>所有文件(*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>所有文件(*);;.%1文件(*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>打开文件...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1文件(*.%1);;所有文件(*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>另存为...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>保持编码并另存为...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation>以root的方式保存。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation>等待授权…</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation>"pkexec" 没有找到。请安装 Polkit!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>是</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>否</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>取消</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>您是否想使用 <b>Windows</b> 结束行?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation>这可能使之适合在 Windows 下阅读。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>无法保存!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>帮助</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>语法</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>未打开大文件!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation>文本选项被转换成空格。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation>选择的文本太长。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation>还未处理完毕。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>此文件已在他处或以其他方式被修改!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>请小心刷新或保存此文档!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation>正在打印...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>打印文档</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation>打印完成。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 页</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>复制目标路径</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>在此打开目标</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation>复制最终目标路径</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation>在此处打开最终目标</translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation>打开包含文件夹</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>你需要添加一个Hunspell字典。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>请参阅首选项→文本→拼写检查!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell字典不存在。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation>Hunspell字典没有附带词缀文件。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>文档中没有拼写错误。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation>文本光标没有拼写错误。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>拼写检查</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>某些文件无法保存!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>转换器</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>轻量级标签式纯文本编辑器</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>基于 Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>作者</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>关于 FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>无替换</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>一次替换</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln 次替换</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation>前1000个替换项高亮。</translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>超出了语法突出显示的大小限制。</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1432,64 +1444,76 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation>菜单栏加速器由 Alt 激活
+并且可能会干扰自定义的快捷方式。</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation>禁用菜单栏加速器</translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>默认隐藏搜索栏(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation>默认情况下,每个搜索条目
 有单独的搜索记录。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>使用共享的搜索记录</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>总是显示状态栏(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>在状态栏上显示光标位置</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>关闭此对话框后生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>标签位置: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>北</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>南</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>西</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>东</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1499,17 +1523,17 @@
 此选项不影响鼠标滚轮控制的标签导航。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation>标签导航循环(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>关闭其最后一个选项卡时关闭窗口</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1520,12 +1544,12 @@
 但某些桌面环境可能不会报告其拥有多个桌面。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>总是在分离窗口打开文件</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1535,32 +1559,32 @@
 某些桌面环境,如 KDE 与 LXQt,提供了自己的文件对话框。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>原生文件对话框</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>如不勾选,则字体默认为 Monospace。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>记住字体(&F)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>包括圆括号、方括号、大括号与引号。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>自动补全括号(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
@@ -1569,110 +1593,110 @@
 在适当的情况下。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation>键入时替换三重句点和双连字符</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation>高亮区分大小写并整体匹配
 所选文本中。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation>高亮选中</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation>禁用语法高亮于文件大小 > </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation>如勾选,则将在状态栏上创建一个按钮,用于更改语法。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>支持语法重写</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation>语法高亮时显示空格、缩进与缩进行。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>用语法高亮显示空格</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation>垂直位置行只会在编辑器字体点数固定时绘制。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation>显示从此位置开始的竖行:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation>也显示行与文档结尾</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>日期与时间格式:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation>某些文本编辑器只能打开最后一行为空的文档。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation>确保保存时在文档末尾留下一行空白</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation>保存时移除结尾空白</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation>鼠标滚论滚动时带惯性</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>文件</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>文件管理</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation>从最后一个窗口的文件开始</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1690,32 +1714,32 @@
 与错误信息会在弹出的对话框中显示。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation>以此命令运行脚本: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation>命令 + 参数</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>显示最近更改的文件(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>显示最近打开的文件(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>自动保存时间间隔:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>帮助</translation>
     </message>
@@ -1725,7 +1749,7 @@
         <translation>以侧边栏模式启动</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1734,57 +1758,57 @@
 还会导致不能通过拖放将单标签窗口合并至另一个窗口。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation>&只有一个选项卡时隐藏选项卡栏</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>文本</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>文本编辑器</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation>默认自动换行(&W)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation>默认自动缩进(&I)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>总是显示行数(&N)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation>默认语法高亮(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>暗色主题(&O)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>背景颜色值: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1802,13 +1826,13 @@
 Ctrl+Alt+E 结束脚本运行。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>需要重新开启窗口以生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1823,13 +1847,13 @@
 需要重新启动应用程序以生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>运行可执行脚本</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1841,8 +1865,8 @@
 需要重新启动应用程序以生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1853,34 +1877,34 @@
 默认格式为:MMM dd, yyyy, hh:mm:ss</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>文本tab缩进:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> 空格</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation>文本光标</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation>如光标在文本视图内,鼠标滚轮滚动是否应带惯性?</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>拼写检查</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
@@ -1889,51 +1913,51 @@
 名称,但以“.aff”结尾。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell字典路径:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>添加词典......</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation>如果未选中,则拼写检查
 将从文件开始启动。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation>从文本光标开始拼写检查</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>最近文件的数量: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation>除非数量不超过50。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation>仅对于存在且可被保存的文件。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> 分钟</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1948,96 +1972,96 @@
 文本文件的尾随空格。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>允许保存未修改的文件</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>改为显示一个警告。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>不允许打开非文本文件</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation>一般情况下,被复制的文件粘贴进 FeatherPad ,这些文件会被打开。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation>粘贴路径而不是文件</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>快捷方式</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>动作</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>快捷方式</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>恢复默认快捷方式。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>默认</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation>语法颜色</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation>元素</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation>文本颜色</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation>空格颜色值:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation>仅在显示行号时有效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation>当前行高亮值:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation>恢复默认语法颜色。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>关闭</translation>
     </message>
@@ -2053,111 +2077,111 @@
         <translation>双击一个颜色来修改它。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>文件</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>文件</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation>警告:检测到不明确的快捷方式!</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation>方法,链接,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation>内建功能</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation>评论</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation>报价单</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation>类型</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation>关键字</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation>数字</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation>正则表达式,代码块等…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation>文档块,XML / HTML元素,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation>Markdown 标题, CSS 值,…</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation>扩展元素</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation>需要重新启动应用程序以使更改生效。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation>需要重新开启窗口以生效。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>最近打开的文件(&R)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>最近更改的文件(&M)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation>输入的快捷方式已被保留。</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell字典文件(* .dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation>选中的语法颜色</translation>
     </message>
@@ -2165,38 +2189,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>搜索...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>区分大小写</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>全字匹配</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation>正则表达式</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation>用正则表达式搜索...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation>下一个</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation>上一个</translation>
     </message>
@@ -2349,7 +2373,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>过滤器...</translation>
     </message>
@@ -2395,7 +2419,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation>双击以居中当前行</translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/data/translations/featherpad_zh_TW.ts featherpad-1.0.1/featherpad/data/translations/featherpad_zh_TW.ts
--- featherpad-0.17.1/featherpad/data/translations/featherpad_zh_TW.ts	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/data/translations/featherpad_zh_TW.ts	2021-10-15 02:56:34.000000000 +0200
@@ -4,7 +4,7 @@
 <context>
     <name>FeatherPad::AboutDialog</name>
     <message>
-        <location filename="../../about.ui" line="161"/>
+        <location filename="../../about.ui" line="167"/>
         <source>License</source>
         <translation>授權條款</translation>
     </message>
@@ -12,18 +12,18 @@
 <context>
     <name>FeatherPad::FPwin</name>
     <message>
-        <location filename="../../fpwin.cpp" line="409"/>
-        <location filename="../../fpwin.cpp" line="1406"/>
-        <location filename="../../fpwin.cpp" line="1468"/>
-        <location filename="../../fpwin.cpp" line="2024"/>
+        <location filename="../../fpwin.cpp" line="438"/>
+        <location filename="../../fpwin.cpp" line="1458"/>
+        <location filename="../../fpwin.cpp" line="1520"/>
         <location filename="../../fpwin.cpp" line="2077"/>
-        <location filename="../../fpwin.cpp" line="2847"/>
-        <location filename="../../fpwin.cpp" line="2867"/>
-        <location filename="../../fpwin.cpp" line="2870"/>
-        <location filename="../../fpwin.cpp" line="3745"/>
-        <location filename="../../fpwin.cpp" line="4457"/>
-        <location filename="../../fpwin.cpp" line="4737"/>
-        <location filename="../../fpwin.cpp" line="4997"/>
+        <location filename="../../fpwin.cpp" line="2139"/>
+        <location filename="../../fpwin.cpp" line="2913"/>
+        <location filename="../../fpwin.cpp" line="2933"/>
+        <location filename="../../fpwin.cpp" line="2936"/>
+        <location filename="../../fpwin.cpp" line="3805"/>
+        <location filename="../../fpwin.cpp" line="4518"/>
+        <location filename="../../fpwin.cpp" line="4812"/>
+        <location filename="../../fpwin.cpp" line="5071"/>
         <source>Untitled</source>
         <translation>未命名</translation>
     </message>
@@ -66,9 +66,9 @@
         <translation>選項(&O)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1429"/>
-        <location filename="../../fpwin.cpp" line="2761"/>
-        <location filename="../../fpwin.cpp" line="4266"/>
+        <location filename="../../fpwin.cpp" line="1481"/>
+        <location filename="../../fpwin.cpp" line="2827"/>
+        <location filename="../../fpwin.cpp" line="4326"/>
         <source>Encoding</source>
         <translation>字元編碼</translation>
     </message>
@@ -135,7 +135,7 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="519"/>
-        <location filename="../../fpwin.cpp" line="1204"/>
+        <location filename="../../fpwin.cpp" line="1256"/>
         <source>&Save</source>
         <translation>儲存(&S)</translation>
     </message>
@@ -610,9 +610,9 @@
     </message>
     <message>
         <location filename="../../fp.ui" line="342"/>
-        <location filename="../../fpwin.cpp" line="3848"/>
-        <location filename="../../replace.cpp" line="62"/>
-        <location filename="../../replace.cpp" line="114"/>
+        <location filename="../../fpwin.cpp" line="3908"/>
+        <location filename="../../replace.cpp" line="61"/>
+        <location filename="../../replace.cpp" line="113"/>
         <source>Replacement</source>
         <translation>取代</translation>
     </message>
@@ -799,461 +799,473 @@
         <translation>全部取代</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="556"/>
+        <location filename="../../fpwin.cpp" line="593"/>
         <source>&Recently Opened</source>
         <translation>最近開啟(&R)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1865"/>
+        <location filename="../../fpwin.cpp" line="1917"/>
         <source>Close</source>
         <translation>關閉</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1190"/>
+        <location filename="../../fpwin.cpp" line="1242"/>
         <source>Save changes?</source>
         <translation>要儲存變更嗎?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="845"/>
+        <location filename="../../fpwin.cpp" line="894"/>
         <source>Please attend to that window or just close its dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1194"/>
+        <location filename="../../fpwin.cpp" line="1246"/>
         <source>The document has been modified.</source>
         <translation>文件已修改。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1205"/>
+        <location filename="../../fpwin.cpp" line="1257"/>
         <source>&Discard changes</source>
         <translation>捨棄變更(&D)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1206"/>
+        <location filename="../../fpwin.cpp" line="1258"/>
         <source>&Cancel</source>
         <translation>取消(&C)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1208"/>
+        <location filename="../../fpwin.cpp" line="1260"/>
         <source>&No to all</source>
         <translation>全部皆否(&N)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1411"/>
-        <location filename="../../fpwin.cpp" line="1469"/>
+        <location filename="../../fpwin.cpp" line="1463"/>
+        <location filename="../../fpwin.cpp" line="1521"/>
         <source>Unsaved</source>
         <translation>未儲存</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1430"/>
-        <location filename="../../fpwin.cpp" line="2763"/>
-        <location filename="../../fpwin.cpp" line="3408"/>
-        <location filename="../../fpwin.cpp" line="3419"/>
-        <location filename="../../fpwin.cpp" line="3426"/>
-        <location filename="../../fpwin.cpp" line="4270"/>
-        <location filename="../../fpwin.cpp" line="5755"/>
-        <location filename="../../fpwin.cpp" line="5766"/>
-        <location filename="../../fpwin.cpp" line="5773"/>
+        <location filename="../../fpwin.cpp" line="1482"/>
+        <location filename="../../fpwin.cpp" line="2829"/>
+        <location filename="../../fpwin.cpp" line="3474"/>
+        <location filename="../../fpwin.cpp" line="3485"/>
+        <location filename="../../fpwin.cpp" line="3492"/>
+        <location filename="../../fpwin.cpp" line="4331"/>
+        <location filename="../../fpwin.cpp" line="5889"/>
+        <location filename="../../fpwin.cpp" line="5900"/>
+        <location filename="../../fpwin.cpp" line="5907"/>
         <source>Lines</source>
         <translation>列</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1431"/>
-        <location filename="../../fpwin.cpp" line="4271"/>
-        <location filename="../../fpwin.cpp" line="4285"/>
+        <location filename="../../fpwin.cpp" line="1483"/>
+        <location filename="../../fpwin.cpp" line="4332"/>
+        <location filename="../../fpwin.cpp" line="4347"/>
         <source>Sel. Chars</source>
         <translation>選取字元</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1432"/>
-        <location filename="../../fpwin.cpp" line="4273"/>
-        <location filename="../../fpwin.cpp" line="4286"/>
+        <location filename="../../fpwin.cpp" line="1484"/>
+        <location filename="../../fpwin.cpp" line="4334"/>
+        <location filename="../../fpwin.cpp" line="4348"/>
         <source>Words</source>
         <translation>文字</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1748"/>
+        <location filename="../../fpwin.cpp" line="1800"/>
         <source>Another process is running in this tab!</source>
         <translation>在這個分頁中有另一個程序正在執行!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1856"/>
+        <location filename="../../fpwin.cpp" line="1908"/>
         <source>Script File</source>
         <translation>腳本檔案</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="844"/>
+        <location filename="../../fpwin.cpp" line="893"/>
         <source>Another FeatherPad window has a modal dialog!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="681"/>
-        <location filename="../../fpwin.cpp" line="4312"/>
+        <location filename="../../fpwin.cpp" line="730"/>
+        <location filename="../../fpwin.cpp" line="4373"/>
         <source>Position:</source>
         <translation>位置:</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="729"/>
-        <location filename="../../fpwin.cpp" line="4330"/>
-        <location filename="../../fpwin.cpp" line="4350"/>
+        <location filename="../../fpwin.cpp" line="778"/>
+        <location filename="../../fpwin.cpp" line="4391"/>
+        <location filename="../../fpwin.cpp" line="4411"/>
         <source>Normal</source>
         <translation>正常</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1192"/>
-        <location filename="../../fpwin.cpp" line="2527"/>
-        <location filename="../../fpwin.cpp" line="5565"/>
+        <location filename="../../fpwin.cpp" line="1244"/>
+        <location filename="../../fpwin.cpp" line="2589"/>
+        <location filename="../../fpwin.cpp" line="5699"/>
         <source>The file does not exist.</source>
         <translation>檔案不存在。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1561"/>
+        <location filename="../../fpwin.cpp" line="1613"/>
         <source>Open Link</source>
         <translation>開啟連結</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1574"/>
+        <location filename="../../fpwin.cpp" line="1626"/>
         <source>Copy Link</source>
         <translation>複製連結</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1749"/>
+        <location filename="../../fpwin.cpp" line="1801"/>
         <source>Only one process is allowed per tab.</source>
         <translation>一個分頁只允許一個程序。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1852"/>
+        <location filename="../../fpwin.cpp" line="1904"/>
         <source>Script Output</source>
         <translation>腳本輸出</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="1868"/>
+        <location filename="../../fpwin.cpp" line="1920"/>
         <source>Clear</source>
         <translation>清除</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2484"/>
+        <location filename="../../fpwin.cpp" line="2546"/>
         <source>FeatherPad does not open files larger than 100 MiB.</source>
         <translation>FeatherPad 無法開啟大於 100 MiB 的檔案。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2492"/>
+        <location filename="../../fpwin.cpp" line="2554"/>
         <source>Non-text file(s) not opened!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2493"/>
+        <location filename="../../fpwin.cpp" line="2555"/>
         <source>See Preferences → Files → Do not permit opening of non-text files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2502"/>
+        <location filename="../../fpwin.cpp" line="2564"/>
         <source>Some file(s) could not be opened!</source>
         <translation>無法開啟一些檔案!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2503"/>
+        <location filename="../../fpwin.cpp" line="2565"/>
         <source>You may not have the permission to read.</source>
         <translation>您可能沒有讀取權限。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2513"/>
+        <location filename="../../fpwin.cpp" line="2575"/>
         <source>Uneditable file(s)!</source>
         <translation>無法編輯的檔案!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2514"/>
+        <location filename="../../fpwin.cpp" line="2576"/>
         <source>Non-text files or files with huge lines cannot be edited.</source>
         <translation>無法編輯非文字檔案或具有長列的檔案。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2578"/>
+        <location filename="../../fpwin.cpp" line="2640"/>
         <source>A previous crash detected!</source>
         <translation>偵測到之前當機!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2579"/>
+        <location filename="../../fpwin.cpp" line="2641"/>
         <source>Preferably, close all FeatherPad windows and start again!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2587"/>
+        <location filename="../../fpwin.cpp" line="2649"/>
         <source>Root Instance</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2659"/>
-        <location filename="../../fpwin.cpp" line="2828"/>
-        <location filename="../../fpwin.cpp" line="2856"/>
+        <location filename="../../fpwin.cpp" line="2721"/>
+        <location filename="../../fpwin.cpp" line="2894"/>
+        <location filename="../../fpwin.cpp" line="2922"/>
         <source>All Files (*)</source>
         <translation>所有檔案 (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2664"/>
+        <location filename="../../fpwin.cpp" line="2726"/>
         <source>All Files (*);;.%1 Files (*.%1)</source>
         <translation>所有檔案 (*);;.%1 檔案 (*.%1)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2668"/>
+        <location filename="../../fpwin.cpp" line="2730"/>
         <source>Open file...</source>
         <translation>開啟檔案...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2834"/>
+        <location filename="../../fpwin.cpp" line="2900"/>
         <source>.%1 Files (*.%1);;All Files (*)</source>
         <translation>.%1 檔案 (*.%1);;所有檔案 (*)</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2885"/>
-        <location filename="../../fpwin.cpp" line="2923"/>
+        <location filename="../../fpwin.cpp" line="2951"/>
+        <location filename="../../fpwin.cpp" line="2989"/>
         <source>Save as...</source>
         <translation>儲存為...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2959"/>
+        <location filename="../../fpwin.cpp" line="3025"/>
         <source>Keep encoding and save as...</source>
         <translation>保持編碼並儲存為...</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3231"/>
+        <location filename="../../fpwin.cpp" line="3297"/>
         <source>Saving as root.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3232"/>
+        <location filename="../../fpwin.cpp" line="3298"/>
         <source>Waiting for authentication...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3352"/>
+        <location filename="../../fpwin.cpp" line="3418"/>
         <source>"pkexec" is not found. Please install Polkit!</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3040"/>
+        <location filename="../../fpwin.cpp" line="3106"/>
         <source>Yes</source>
         <translation>是</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3041"/>
+        <location filename="../../fpwin.cpp" line="3107"/>
         <source>No</source>
         <translation>否</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3042"/>
+        <location filename="../../fpwin.cpp" line="3108"/>
         <source>Cancel</source>
         <translation>取消</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3043"/>
+        <location filename="../../fpwin.cpp" line="3109"/>
         <source>Do you want to use <b>MS Windows</b> end-of-lines?</source>
         <translation>您要使用 <b>MS Windows</b> 行尾嗎?</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3044"/>
+        <location filename="../../fpwin.cpp" line="3110"/>
         <source>This may be good for readability under MS Windows.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3160"/>
-        <location filename="../../fpwin.cpp" line="3246"/>
-        <location filename="../../fpwin.cpp" line="3351"/>
-        <location filename="../../fpwin.cpp" line="3363"/>
+        <location filename="../../fpwin.cpp" line="3226"/>
+        <location filename="../../fpwin.cpp" line="3312"/>
+        <location filename="../../fpwin.cpp" line="3417"/>
+        <location filename="../../fpwin.cpp" line="3429"/>
         <source>Cannot be saved!</source>
         <translation>無法儲存!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="407"/>
-        <location filename="../../fpwin.cpp" line="3743"/>
-        <location filename="../../fpwin.cpp" line="4735"/>
-        <location filename="../../fpwin.cpp" line="4995"/>
-        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="436"/>
+        <location filename="../../fpwin.cpp" line="3803"/>
+        <location filename="../../fpwin.cpp" line="4810"/>
+        <location filename="../../fpwin.cpp" line="5069"/>
+        <location filename="../../fpwin.cpp" line="6104"/>
         <source>Help</source>
         <translation>說明</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3404"/>
-        <location filename="../../fpwin.cpp" line="3410"/>
-        <location filename="../../fpwin.cpp" line="3418"/>
-        <location filename="../../fpwin.cpp" line="4269"/>
-        <location filename="../../fpwin.cpp" line="5751"/>
-        <location filename="../../fpwin.cpp" line="5757"/>
-        <location filename="../../fpwin.cpp" line="5765"/>
+        <location filename="../../fpwin.cpp" line="3470"/>
+        <location filename="../../fpwin.cpp" line="3476"/>
+        <location filename="../../fpwin.cpp" line="3484"/>
+        <location filename="../../fpwin.cpp" line="4329"/>
+        <location filename="../../fpwin.cpp" line="5885"/>
+        <location filename="../../fpwin.cpp" line="5891"/>
+        <location filename="../../fpwin.cpp" line="5899"/>
         <source>Syntax</source>
         <translation>語法</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="2483"/>
+        <location filename="../../fpwin.cpp" line="2545"/>
         <source>Huge file(s) not opened!</source>
         <translation>未開啟大檔案!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3507"/>
+        <location filename="../../fpwin.cpp" line="3573"/>
         <source>Text tabs are converted to spaces.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3615"/>
+        <location filename="../../fpwin.cpp" line="3675"/>
         <source>The selected text was too long.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3616"/>
+        <location filename="../../fpwin.cpp" line="3676"/>
         <source>It is not fully processed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3755"/>
-        <location filename="../../fpwin.cpp" line="3947"/>
+        <location filename="../../fpwin.cpp" line="3815"/>
+        <location filename="../../fpwin.cpp" line="4007"/>
         <source>This file has been modified elsewhere or in another way!</source>
         <translation>這個檔案已在其他地方或以另一種方式修改!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="3756"/>
-        <location filename="../../fpwin.cpp" line="3948"/>
+        <location filename="../../fpwin.cpp" line="3816"/>
+        <location filename="../../fpwin.cpp" line="4008"/>
         <source>Please be careful about reloading or saving this document!</source>
         <translation>在重新載入或儲存這個文件時請小心!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4423"/>
+        <location filename="../../fpwin.cpp" line="4484"/>
         <source>Printing in progress...</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4474"/>
+        <location filename="../../fpwin.cpp" line="4535"/>
         <source>Print Document</source>
         <translation>列印文件</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="4480"/>
+        <location filename="../../fpwin.cpp" line="4541"/>
         <source>Printing completed.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5122"/>
-        <location filename="../../fpwin.cpp" line="5201"/>
+        <location filename="../../fpwin.cpp" line="5199"/>
+        <location filename="../../fpwin.cpp" line="5304"/>
         <source>%1 Pages</source>
         <translation>%1 頁</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5149"/>
-        <location filename="../../fpwin.cpp" line="5233"/>
+        <location filename="../../fpwin.cpp" line="5230"/>
+        <location filename="../../fpwin.cpp" line="5340"/>
         <source>Copy Target Path</source>
         <translation>複製目標路徑</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5153"/>
-        <location filename="../../fpwin.cpp" line="5237"/>
+        <location filename="../../fpwin.cpp" line="5234"/>
+        <location filename="../../fpwin.cpp" line="5344"/>
         <source>Open Target Here</source>
         <translation>在這裡開啟目標</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5171"/>
-        <location filename="../../fpwin.cpp" line="5256"/>
+        <location filename="../../fpwin.cpp" line="5253"/>
+        <location filename="../../fpwin.cpp" line="5364"/>
+        <source>Copy Final Target Path</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5257"/>
+        <location filename="../../fpwin.cpp" line="5368"/>
+        <source>Open Final Target Here</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../fpwin.cpp" line="5274"/>
+        <location filename="../../fpwin.cpp" line="5386"/>
         <source>Open Containing Folder</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5365"/>
+        <location filename="../../fpwin.cpp" line="5495"/>
         <source>You need to add a Hunspell dictionary.</source>
         <translation>您需要加入 Hunspell 字典。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5366"/>
-        <location filename="../../fpwin.cpp" line="5373"/>
-        <location filename="../../fpwin.cpp" line="5383"/>
+        <location filename="../../fpwin.cpp" line="5496"/>
+        <location filename="../../fpwin.cpp" line="5503"/>
+        <location filename="../../fpwin.cpp" line="5513"/>
         <source>See Preferences → Text → Spell Checking!</source>
         <translation>檢視偏好設定 → 文字 → 拼字檢查!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5372"/>
+        <location filename="../../fpwin.cpp" line="5502"/>
         <source>The Hunspell dictionary does not exist.</source>
         <translation>Hunspell 字典不存在。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5382"/>
+        <location filename="../../fpwin.cpp" line="5512"/>
         <source>The Hunspell dictionary is not accompanied by an affix file.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5405"/>
-        <location filename="../../fpwin.cpp" line="5423"/>
-        <location filename="../../fpwin.cpp" line="5438"/>
+        <location filename="../../fpwin.cpp" line="5535"/>
+        <location filename="../../fpwin.cpp" line="5553"/>
+        <location filename="../../fpwin.cpp" line="5568"/>
         <source>No misspelling in document.</source>
         <translation>文件中沒有拼字錯誤。</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5407"/>
-        <location filename="../../fpwin.cpp" line="5425"/>
-        <location filename="../../fpwin.cpp" line="5440"/>
+        <location filename="../../fpwin.cpp" line="5537"/>
+        <location filename="../../fpwin.cpp" line="5555"/>
+        <location filename="../../fpwin.cpp" line="5570"/>
         <source>No misspelling from text cursor.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5453"/>
+        <location filename="../../fpwin.cpp" line="5586"/>
         <source>Spell Checking</source>
         <translation>拼字檢查</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5789"/>
+        <location filename="../../fpwin.cpp" line="5923"/>
         <source>Some files cannot be saved!</source>
         <translation>無法儲存一些檔案!</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
         <source>Translators</source>
         <translation>譯者</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5832"/>
+        <location filename="../../fpwin.cpp" line="5966"/>
         <source>A lightweight, tabbed, plain-text editor</source>
         <translation>輕量、具有分頁、純文字編輯器</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5833"/>
+        <location filename="../../fpwin.cpp" line="5967"/>
         <source>based on Qt</source>
         <translation>基於 Qt</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5834"/>
+        <location filename="../../fpwin.cpp" line="5968"/>
         <source>Author</source>
         <translation>作者</translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5835"/>
+        <location filename="../../fpwin.cpp" line="5969"/>
         <source>aka.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../fpwin.cpp" line="5836"/>
-        <location filename="../../fpwin.cpp" line="5837"/>
+        <location filename="../../fpwin.cpp" line="5970"/>
+        <location filename="../../fpwin.cpp" line="5971"/>
         <source>About FeatherPad</source>
         <translation>關於 FeatherPad</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="243"/>
+        <location filename="../../replace.cpp" line="242"/>
         <source>No Replacement</source>
         <translation>沒有取代</translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="245"/>
+        <location filename="../../replace.cpp" line="244"/>
         <source>One Replacement</source>
         <translation>一個取代</translation>
     </message>
     <message numerus="yes">
-        <location filename="../../replace.cpp" line="247"/>
+        <location filename="../../replace.cpp" line="246"/>
         <source>%Ln Replacements</source>
         <translation>
             <numerusform>%Ln 個取代</numerusform>
         </translation>
     </message>
     <message>
-        <location filename="../../replace.cpp" line="251"/>
+        <location filename="../../replace.cpp" line="250"/>
         <source>The first 1000 replacements are highlighted.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../syntax.cpp" line="276"/>
+        <location filename="../../syntax.cpp" line="298"/>
         <source>The size limit for syntax highlighting is exceeded.</source>
         <translation>超過語法標示的大小限制。</translation>
     </message>
@@ -1261,13 +1273,13 @@
 <context>
     <name>FeatherPad::FileDialog</name>
     <message>
-        <location filename="../../filedialog.h" line="48"/>
+        <location filename="../../filedialog.h" line="49"/>
         <source>Ctrl+H</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../filedialog.h" line="49"/>
+        <location filename="../../filedialog.h" line="50"/>
         <source>Alt+.</source>
         <comment>Toggle showing hidden files</comment>
         <translation></translation>
@@ -1433,63 +1445,74 @@
     </message>
     <message>
         <location filename="../../prefDialog.ui" line="218"/>
+        <source>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="222"/>
+        <source>Disable menubar accelerators</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../../prefDialog.ui" line="229"/>
         <source>Hide search &bar by default</source>
         <translation>預設隱藏搜尋列(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="225"/>
+        <location filename="../../prefDialog.ui" line="236"/>
         <source>By default, each search entry
 has a separate search history.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="229"/>
+        <location filename="../../prefDialog.ui" line="240"/>
         <source>Use a shared search history</source>
         <translation>使用共享的搜尋記錄</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="236"/>
+        <location filename="../../prefDialog.ui" line="247"/>
         <source>Always show st&atus bar</source>
         <translation>總是顯示狀態列(&A)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="261"/>
+        <location filename="../../prefDialog.ui" line="272"/>
         <source>Show cursor position on status bar</source>
         <translation>在狀態列顯示游標位置</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="272"/>
-        <location filename="../../prefDialog.ui" line="282"/>
+        <location filename="../../prefDialog.ui" line="283"/>
+        <location filename="../../prefDialog.ui" line="293"/>
         <source>Will take effect after closing this dialog.</source>
         <translation>會在關閉這個對話方塊後生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="275"/>
+        <location filename="../../prefDialog.ui" line="286"/>
         <source>Tab position: </source>
         <translation>分頁位置: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="286"/>
+        <location filename="../../prefDialog.ui" line="297"/>
         <source>North</source>
         <translation>北</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="291"/>
+        <location filename="../../prefDialog.ui" line="302"/>
         <source>South</source>
         <translation>南</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="296"/>
+        <location filename="../../prefDialog.ui" line="307"/>
         <source>West</source>
         <translation>西</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="301"/>
+        <location filename="../../prefDialog.ui" line="312"/>
         <source>East</source>
         <translation>東</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="327"/>
+        <location filename="../../prefDialog.ui" line="338"/>
         <source>This means that, for LTR, Alt+Right goes to the first tab
 after the last tab is activated, and the same for Alt+Left.
 
@@ -1497,17 +1520,17 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="333"/>
+        <location filename="../../prefDialog.ui" line="344"/>
         <source>Tab navigation wraps &around</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="353"/>
+        <location filename="../../prefDialog.ui" line="364"/>
         <source>Close window on closing its last tab</source>
         <translation>在關閉最後一個分頁時關閉視窗</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="360"/>
+        <location filename="../../prefDialog.ui" line="371"/>
         <source>By default, if a FeatherPad window exists on the
 current desktop, files will be opened in its tabs.
 
@@ -1516,12 +1539,12 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="367"/>
+        <location filename="../../prefDialog.ui" line="378"/>
         <source>Always open in separate windows</source>
         <translation>總是在個別的視窗中開啟</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="374"/>
+        <location filename="../../prefDialog.ui" line="385"/>
         <source>If this is checked, the file dialog provided by the current
 desktop environment will be used instead of the Qt file dialog.
 
@@ -1529,141 +1552,141 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="380"/>
+        <location filename="../../prefDialog.ui" line="391"/>
         <source>Native file dialog</source>
         <translation>原生檔案對話方塊</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="456"/>
+        <location filename="../../prefDialog.ui" line="467"/>
         <source>Uncheck for Monospace.</source>
         <translation>取消勾選以使用等寬字型。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="459"/>
+        <location filename="../../prefDialog.ui" line="470"/>
         <source>Remember &font</source>
         <translation>記住字型(&F)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="480"/>
+        <location filename="../../prefDialog.ui" line="491"/>
         <source>This covers parentheses, braces, brackets and quotes.</source>
         <translation>這包含括號、大括號、中括號和引號。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="483"/>
+        <location filename="../../prefDialog.ui" line="494"/>
         <source>Auto-&bracket</source>
         <translation>自動括弧(&B)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="490"/>
+        <location filename="../../prefDialog.ui" line="501"/>
         <source>By default, a triple period is replaced with an ellipsis
 and a double hyphen with a long dash while typing,
 under proper circumstances.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="495"/>
+        <location filename="../../prefDialog.ui" line="506"/>
         <source>Replace triple periods and double hyphens while typing</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="509"/>
+        <location filename="../../prefDialog.ui" line="520"/>
         <source>Highlight case-sensitive and whole matches
 of the selected text.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="513"/>
+        <location filename="../../prefDialog.ui" line="524"/>
         <source>Selection highlighting</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="576"/>
+        <location filename="../../prefDialog.ui" line="587"/>
         <source>Never highlight syntax for files > </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="545"/>
+        <location filename="../../prefDialog.ui" line="556"/>
         <source>This creates a menu button on the
 status bar for changing the syntax.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="549"/>
+        <location filename="../../prefDialog.ui" line="560"/>
         <source>Support syntax override</source>
         <translation>支援語法覆蓋</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="614"/>
+        <location filename="../../prefDialog.ui" line="625"/>
         <source>Show spaces, tabs and tab lines
 when the syntax is highlighted.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="618"/>
+        <location filename="../../prefDialog.ui" line="629"/>
         <source>Show whitespaces</source>
         <translation>顯示空格</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="634"/>
         <location filename="../../prefDialog.ui" line="645"/>
+        <location filename="../../prefDialog.ui" line="656"/>
         <source>The vertical position lines will be drawn only if
 the editor font has a fixed pitch (like Monospace).</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="638"/>
+        <location filename="../../prefDialog.ui" line="649"/>
         <source>Show vertical lines starting from this position:</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="625"/>
+        <location filename="../../prefDialog.ui" line="636"/>
         <source>Also show line and document ends</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="764"/>
+        <location filename="../../prefDialog.ui" line="775"/>
         <source>Date and time format:</source>
         <translation>日期和時間格式:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="834"/>
+        <location filename="../../prefDialog.ui" line="845"/>
         <source>Some text editors cannot open a document
 whose last line is not empty.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="838"/>
+        <location filename="../../prefDialog.ui" line="849"/>
         <source>Ensure an empty last line on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="845"/>
+        <location filename="../../prefDialog.ui" line="856"/>
         <source>Remove trailing spaces on saving</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="863"/>
+        <location filename="../../prefDialog.ui" line="874"/>
         <source>Inertial scrolling with mouse wheel</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="952"/>
+        <location filename="../../prefDialog.ui" line="963"/>
         <source>Files</source>
         <translation>檔案</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="958"/>
+        <location filename="../../prefDialog.ui" line="969"/>
         <source>File Management</source>
         <translation>檔案管理</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1075"/>
+        <location filename="../../prefDialog.ui" line="1086"/>
         <source>Start with files of last window</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1117"/>
-        <location filename="../../prefDialog.ui" line="1136"/>
+        <location filename="../../prefDialog.ui" line="1128"/>
+        <location filename="../../prefDialog.ui" line="1147"/>
         <source>This can be any starting command with
 arguments, for example, "xterm -hold"
 for running the process in XTerm.
@@ -1677,32 +1700,32 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1129"/>
+        <location filename="../../prefDialog.ui" line="1140"/>
         <source>Start with this command: </source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1148"/>
+        <location filename="../../prefDialog.ui" line="1159"/>
         <source>Command + Arguments</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1033"/>
+        <location filename="../../prefDialog.ui" line="1044"/>
         <source>Show recentl&y modified files</source>
         <translation>顯示最近修改的檔案(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1063"/>
+        <location filename="../../prefDialog.ui" line="1074"/>
         <source>Show recentl&y opened files</source>
         <translation>顯示最近開啟的檔案(&Y)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1162"/>
+        <location filename="../../prefDialog.ui" line="1173"/>
         <source>Save changes to opened files every:</source>
         <translation>儲存開啟檔案的變更每:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1428"/>
+        <location filename="../../prefDialog.ui" line="1439"/>
         <source>Help</source>
         <translation>說明</translation>
     </message>
@@ -1712,7 +1735,7 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="340"/>
+        <location filename="../../prefDialog.ui" line="351"/>
         <source>If this is checked, not only you will lose the informative
 tooltip and context menu of a single tab but you could not
 merge a single tabbed window into another one by tab drag-
@@ -1720,57 +1743,57 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="346"/>
+        <location filename="../../prefDialog.ui" line="357"/>
         <source>&Do not show a single tab</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="411"/>
+        <location filename="../../prefDialog.ui" line="422"/>
         <source>Text</source>
         <translation>文字</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="450"/>
+        <location filename="../../prefDialog.ui" line="461"/>
         <source>Text Editor</source>
         <translation>文字編輯器</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="466"/>
+        <location filename="../../prefDialog.ui" line="477"/>
         <source>&Wrap lines by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="473"/>
+        <location filename="../../prefDialog.ui" line="484"/>
         <source>Auto-&indent by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="502"/>
+        <location filename="../../prefDialog.ui" line="513"/>
         <source>Always show line &numbers</source>
         <translation>總是顯示列號(&N)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="520"/>
+        <location filename="../../prefDialog.ui" line="531"/>
         <source>Highlight s&yntax by default</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="680"/>
+        <location filename="../../prefDialog.ui" line="691"/>
         <source>Dark c&olor scheme</source>
         <translation>暗色配色方案(&O)</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="715"/>
+        <location filename="../../prefDialog.ui" line="726"/>
         <source>Background color value: </source>
         <translation>背景顏色值: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="583"/>
+        <location filename="../../prefDialog.ui" line="594"/>
         <source> MiB</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1082"/>
+        <location filename="../../prefDialog.ui" line="1093"/>
         <source>This only includes executable files written
 in script languages like Shell and Python.
 
@@ -1782,13 +1805,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="677"/>
+        <location filename="../../prefDialog.ui" line="688"/>
         <source>Needs window reopening to take effect.</source>
         <translation>需要重新開啟視窗才能生效。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="705"/>
-        <location filename="../../prefDialog.ui" line="722"/>
+        <location filename="../../prefDialog.ui" line="716"/>
+        <location filename="../../prefDialog.ui" line="733"/>
         <source>The color value of the background.
 255 means white while 0 means black.
 
@@ -1800,13 +1823,13 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1092"/>
+        <location filename="../../prefDialog.ui" line="1103"/>
         <source>Run executable scripts</source>
         <translation>執行可執行的腳本</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="966"/>
-        <location filename="../../prefDialog.ui" line="980"/>
+        <location filename="../../prefDialog.ui" line="977"/>
+        <location filename="../../prefDialog.ui" line="991"/>
         <source>The maximum number of recently modified or
 opened files FeatherPad shows. The default
 is 10.
@@ -1815,8 +1838,8 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="756"/>
-        <location filename="../../prefDialog.ui" line="771"/>
+        <location filename="../../prefDialog.ui" line="767"/>
+        <location filename="../../prefDialog.ui" line="782"/>
         <source>Used for pasting the date and time.
 
 Takes effect after closing this dialog.
@@ -1826,84 +1849,84 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="793"/>
+        <location filename="../../prefDialog.ui" line="804"/>
         <source>Text tab size:</source>
         <translation>文字 tab 大小</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="800"/>
+        <location filename="../../prefDialog.ui" line="811"/>
         <source> spaces</source>
         <translation> 空格</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="852"/>
+        <location filename="../../prefDialog.ui" line="863"/>
         <source>Thick text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="859"/>
+        <location filename="../../prefDialog.ui" line="870"/>
         <source>Should the mouse wheel scrolling be inertial
 if the cursor is inside the text view?</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="870"/>
+        <location filename="../../prefDialog.ui" line="881"/>
         <source>Spell Checking</source>
         <translation>拼字檢查</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="878"/>
-        <location filename="../../prefDialog.ui" line="890"/>
+        <location filename="../../prefDialog.ui" line="889"/>
+        <location filename="../../prefDialog.ui" line="901"/>
         <source>A Hunspell dictionary has a name that ends with ".dic"
 and should be alongside an affix file with the same
 name but ending with ".aff".</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="883"/>
+        <location filename="../../prefDialog.ui" line="894"/>
         <source>Hunspell dictionary path:</source>
         <translation>Hunspell 字典路徑:</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="902"/>
-        <location filename="../../pref.cpp" line="1642"/>
+        <location filename="../../prefDialog.ui" line="913"/>
+        <location filename="../../pref.cpp" line="1648"/>
         <source>Add dictionary...</source>
         <translation>加入字典...</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="914"/>
+        <location filename="../../prefDialog.ui" line="925"/>
         <source>If this is unchecked, spell checking
 will be started from the document start.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="918"/>
+        <location filename="../../prefDialog.ui" line="929"/>
         <source>Start spell checking from text cursor</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="973"/>
+        <location filename="../../prefDialog.ui" line="984"/>
         <source>Number of recent files: </source>
         <translation>最近檔案的數量: </translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1072"/>
+        <location filename="../../prefDialog.ui" line="1083"/>
         <source>Only if their number is not greater than 50.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1159"/>
-        <location filename="../../prefDialog.ui" line="1169"/>
+        <location filename="../../prefDialog.ui" line="1170"/>
+        <location filename="../../prefDialog.ui" line="1180"/>
         <source>Only for files that exist and can be saved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1172"/>
+        <location filename="../../prefDialog.ui" line="1183"/>
         <source> min</source>
         <translation> 分鐘</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1203"/>
+        <location filename="../../prefDialog.ui" line="1214"/>
         <source>If this is checked, the Save button/menu-item could
 be used also when the opened file is not modified.
 
@@ -1913,96 +1936,96 @@
         <translation></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1211"/>
+        <location filename="../../prefDialog.ui" line="1222"/>
         <source>Allow saving unmodified files</source>
         <translation>允許儲存未修改的檔案</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1218"/>
+        <location filename="../../prefDialog.ui" line="1229"/>
         <source>Show a warning instead.</source>
         <translation>而是顯示警告。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1221"/>
+        <location filename="../../prefDialog.ui" line="1232"/>
         <source>Do not permit opening of non-text files</source>
         <translation>不允許開啟非文字檔案</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1228"/>
+        <location filename="../../prefDialog.ui" line="1239"/>
         <source>By default, when files are copied, they will
 be opened if they are pasted into FeatherPad.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1232"/>
+        <location filename="../../prefDialog.ui" line="1243"/>
         <source>Paste paths instead of files</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1259"/>
+        <location filename="../../prefDialog.ui" line="1270"/>
         <source>Shortcuts</source>
         <translation>快速鍵</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1278"/>
+        <location filename="../../prefDialog.ui" line="1289"/>
         <source>Action</source>
         <translation>動作</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1283"/>
+        <location filename="../../prefDialog.ui" line="1294"/>
         <source>Shortcut</source>
         <translation>快速鍵</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1291"/>
+        <location filename="../../prefDialog.ui" line="1302"/>
         <source>Restore default shortcuts.</source>
         <translation>還原預設快速鍵。</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1294"/>
-        <location filename="../../prefDialog.ui" line="1382"/>
-        <location filename="../../prefDialog.ui" line="1407"/>
+        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1393"/>
+        <location filename="../../prefDialog.ui" line="1418"/>
         <source>Default</source>
         <translation>預設值</translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1305"/>
+        <location filename="../../prefDialog.ui" line="1316"/>
         <source>Syntax Colors</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1321"/>
+        <location filename="../../prefDialog.ui" line="1332"/>
         <source>Element</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1326"/>
+        <location filename="../../prefDialog.ui" line="1337"/>
         <source>Text Color</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1339"/>
+        <location filename="../../prefDialog.ui" line="1350"/>
         <source>Whitespace color value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1369"/>
-        <location filename="../../prefDialog.ui" line="1379"/>
+        <location filename="../../prefDialog.ui" line="1380"/>
+        <location filename="../../prefDialog.ui" line="1390"/>
         <source>Has effect only if line numbers are shown.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1372"/>
+        <location filename="../../prefDialog.ui" line="1383"/>
         <source>Current line highlight value:</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1404"/>
+        <location filename="../../prefDialog.ui" line="1415"/>
         <source>Restore default syntax colors.</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../prefDialog.ui" line="1439"/>
+        <location filename="../../prefDialog.ui" line="1450"/>
         <source>Close</source>
         <translation>關閉</translation>
     </message>
@@ -2018,111 +2041,111 @@
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>files</source>
         <translation>檔案</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="302"/>
-        <location filename="../../pref.cpp" line="1338"/>
+        <location filename="../../pref.cpp" line="306"/>
+        <location filename="../../pref.cpp" line="1344"/>
         <source>file</source>
         <translation>檔案</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="355"/>
-        <location filename="../../pref.cpp" line="1457"/>
+        <location filename="../../pref.cpp" line="359"/>
+        <location filename="../../pref.cpp" line="1463"/>
         <source>Warning: Ambiguous shortcut detected!</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="388"/>
+        <location filename="../../pref.cpp" line="392"/>
         <source>Functions, URLs,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="389"/>
+        <location filename="../../pref.cpp" line="393"/>
         <source>Built-in Functions</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="390"/>
+        <location filename="../../pref.cpp" line="394"/>
         <source>Comments</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="391"/>
+        <location filename="../../pref.cpp" line="395"/>
         <source>Quotations</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="392"/>
+        <location filename="../../pref.cpp" line="396"/>
         <source>Types</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="393"/>
+        <location filename="../../pref.cpp" line="397"/>
         <source>Key Words</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="394"/>
+        <location filename="../../pref.cpp" line="398"/>
         <source>Numbers</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="395"/>
+        <location filename="../../pref.cpp" line="399"/>
         <source>Regular Expressions, Code Blocks,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="396"/>
+        <location filename="../../pref.cpp" line="400"/>
         <source>Document Blocks, XML/HTML Elements,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="397"/>
+        <location filename="../../pref.cpp" line="401"/>
         <source>Markdown Headings, CSS Values,…</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="398"/>
+        <location filename="../../pref.cpp" line="402"/>
         <source>Extra Elements</source>
         <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="559"/>
+        <location filename="../../pref.cpp" line="563"/>
         <source>Application restart is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="577"/>
+        <location filename="../../pref.cpp" line="582"/>
         <source>Window reopening is needed for changes to take effect.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1364"/>
+        <location filename="../../pref.cpp" line="1370"/>
         <source>&Recently Opened</source>
         <translation>最近開啟(&R)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1365"/>
+        <location filename="../../pref.cpp" line="1371"/>
         <source>Recently &Modified</source>
         <translation>最近修改(&M)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1440"/>
+        <location filename="../../pref.cpp" line="1446"/>
         <source>The typed shortcut was reserved.</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="1644"/>
+        <location filename="../../pref.cpp" line="1650"/>
         <source>Hunspell Dictionary Files (*.dic)</source>
         <translation>Hunspell 字典檔 (*.dic)</translation>
     </message>
     <message>
-        <location filename="../../pref.cpp" line="449"/>
-        <location filename="../../pref.cpp" line="1730"/>
+        <location filename="../../pref.cpp" line="453"/>
+        <location filename="../../pref.cpp" line="1736"/>
         <source>Select Syntax Color</source>
         <translation type="unfinished"></translation>
     </message>
@@ -2130,38 +2153,38 @@
 <context>
     <name>FeatherPad::SearchBar</name>
     <message>
-        <location filename="../../searchbar.cpp" line="83"/>
-        <location filename="../../searchbar.cpp" line="162"/>
+        <location filename="../../searchbar.cpp" line="94"/>
+        <location filename="../../searchbar.cpp" line="173"/>
         <source>Search...</source>
         <translation>搜尋...</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="114"/>
+        <location filename="../../searchbar.cpp" line="125"/>
         <source>Match Case</source>
         <translation>符合大小寫</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="121"/>
+        <location filename="../../searchbar.cpp" line="132"/>
         <source>Whole Word</source>
         <translation>整個文字</translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="128"/>
+        <location filename="../../searchbar.cpp" line="139"/>
         <source>Regular Expression</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="160"/>
+        <location filename="../../searchbar.cpp" line="171"/>
         <source>Search with regex...</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="109"/>
+        <location filename="../../searchbar.cpp" line="120"/>
         <source>Next</source>
         <translation></translation>
     </message>
     <message>
-        <location filename="../../searchbar.cpp" line="110"/>
+        <location filename="../../searchbar.cpp" line="121"/>
         <source>Previous</source>
         <translation></translation>
     </message>
@@ -2313,7 +2336,7 @@
 <context>
     <name>FeatherPad::SidePane</name>
     <message>
-        <location filename="../../sidepane.cpp" line="193"/>
+        <location filename="../../sidepane.cpp" line="196"/>
         <source>Filter...</source>
         <translation>過濾器...</translation>
     </message>
@@ -2359,7 +2382,7 @@
 <context>
     <name>FeatherPad::TextEdit</name>
     <message>
-        <location filename="../../textedit.cpp" line="178"/>
+        <location filename="../../textedit.cpp" line="147"/>
         <source>Double click to center current line</source>
         <translation></translation>
     </message>
diff -Nru featherpad-0.17.1/featherpad/featherpad.pro featherpad-1.0.1/featherpad/featherpad.pro
--- featherpad-0.17.1/featherpad/featherpad.pro	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/featherpad.pro	2021-10-15 02:56:34.000000000 +0200
@@ -28,19 +28,12 @@
            lineedit.cpp \
            textedit.cpp \
            tabbar.cpp \
-           highlighter.cpp \
            find.cpp \
            replace.cpp \
            pref.cpp \
            config.cpp \
            brackets.cpp \
            syntax.cpp \
-           highlighter-sh.cpp \
-           highlighter-css.cpp \
-           highlighter-html.cpp \
-           highlighter-patterns.cpp \
-           highlighter-regex.cpp \
-           highlighter-perl-regex.cpp \
            vscrollbar.cpp \
            loading.cpp \
            printing.cpp \
@@ -51,7 +44,22 @@
            sidepane.cpp \
            svgicons.cpp \
            spellChecker.cpp \
-           spellDialog.cpp
+           spellDialog.cpp \
+           highlighter/highlighter.cpp \
+           highlighter/highlighter-css.cpp \
+           highlighter/highlighter-fountain.cpp \
+           highlighter/highlighter-java.cpp \
+           highlighter/highlighter-json.cpp \
+           highlighter/highlighter-html.cpp \
+           highlighter/highlighter-markdown.cpp \
+           highlighter/highlighter-pascal.cpp \
+           highlighter/highlighter-patterns.cpp \
+           highlighter/highlighter-perl-regex.cpp \
+           highlighter/highlighter-regex.cpp \
+           highlighter/highlighter-rest.cpp \
+           highlighter/highlighter-ruby.cpp \
+           highlighter/highlighter-sh.cpp \
+           highlighter/highlighter-yaml.cpp
 
 HEADERS += singleton.h \
            fpwin.h \
@@ -60,7 +68,6 @@
            lineedit.h \
            textedit.h \
            tabbar.h \
-           highlighter.h \
            vscrollbar.h \
            filedialog.h \
            config.h \
@@ -76,7 +83,8 @@
            sidepane.h \
            svgicons.h \
            spellChecker.h \
-           spellDialog.h
+           spellDialog.h \
+           highlighter/highlighter.h
 
 FORMS += fp.ui \
          prefDialog.ui \
@@ -90,7 +98,7 @@
 contains(WITHOUT_X11, YES) {
   message("Compiling without X11...")
 }
-else:unix:!macx:!haiku {
+else:unix:!macx:!haiku:!os2 {
   QT += x11extras
   SOURCES += x11.cpp
   HEADERS += x11.h
@@ -110,8 +118,21 @@
     QMAKE_EXTRA_COMPILERS += updateqm
   }
 }
+else:os2 {
+  LIBS += -lhunspell-1.7_dll
+  RC_FILE = data/featherpad_os2.rc
+  #TRANSLATIONS
+  exists($$[QT_INSTALL_BINS]/lrelease.exe) {
+    TRANSLATIONS = $$system("find data/translations/ -name 'featherpad_*.ts'")
+    updateqm.input = TRANSLATIONS
+    updateqm.output = data/translations/translations/${QMAKE_FILE_BASE}.qm
+    updateqm.commands = $$[QT_INSTALL_BINS]/lrelease ${QMAKE_FILE_IN} -qm data/translations/translations/${QMAKE_FILE_BASE}.qm
+    updateqm.CONFIG += no_link target_predeps
+    QMAKE_EXTRA_COMPILERS += updateqm
+  }
+}
 
-unix:!haiku:!macx {
+unix:!haiku:!macx:!os2 {
   #VARIABLES
   isEmpty(PREFIX) {
     PREFIX = /usr
@@ -132,6 +153,9 @@
   desktop.path = $$DATADIR/applications
   desktop.files += ./data/$${TARGET}.desktop
 
+  metainfo.path = $$DATADIR/metainfo
+  metainfo.files += ./data/$${TARGET}.metainfo.xml
+
   iconsvg.path = $$DATADIR/icons/hicolor/scalable/apps
   iconsvg.files += ./data/$${TARGET}.svg
 
@@ -142,7 +166,7 @@
   trans.path = $$DATADIR/featherpad
   trans.files += data/translations/translations
 
-  INSTALLS += target slink desktop iconsvg help trans
+  INSTALLS += target slink desktop metainfo iconsvg help trans
 }
 else:haiku {
   isEmpty(PREFIX) {
@@ -185,4 +209,28 @@
   trans.files += data/translations/translations
 
   INSTALLS += target help trans
+}
+else:os2 {
+  #VARIABLES
+
+  isEmpty(PREFIX) {
+    PREFIX = /@unixroot/usr
+  }
+  BINDIR = $$PREFIX/bin
+  DATADIR =$$PREFIX/share
+
+  DEFINES += DATADIR=\\\"$$DATADIR\\\" PKGDATADIR=\\\"$$PKGDATADIR\\\"
+
+  #MAKE INSTALL
+
+  target.path =$$BINDIR
+
+  help.path = $$DATADIR/featherpad
+  help.files += ./data/help
+  help.files += ./data/help_*
+
+  trans.path = $$DATADIR/featherpad
+  trans.files += data/translations/translations
+
+  INSTALLS += target help trans
 }
diff -Nru featherpad-0.17.1/featherpad/filedialog.h featherpad-1.0.1/featherpad/filedialog.h
--- featherpad-0.17.1/featherpad/filedialog.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/filedialog.h	2021-10-15 02:56:34.000000000 +0200
@@ -24,6 +24,7 @@
 #include <QTreeView>
 #include <QTimer>
 #include <QShortcut>
+#include <QGuiApplication>
 
 namespace FeatherPad {
 
@@ -65,7 +66,7 @@
 
 protected:
     void showEvent(QShowEvent * event) {
-        if (p && !native)
+        if (p && !native && QGuiApplication::platformName() != "wayland")
             QTimer::singleShot (0, this, &FileDialog::center);
         QFileDialog::showEvent (event);
     }
diff -Nru featherpad-0.17.1/featherpad/fpwin.cpp featherpad-1.0.1/featherpad/fpwin.cpp
--- featherpad-0.17.1/featherpad/fpwin.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/fpwin.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -117,8 +117,8 @@
     /* shortcuts should be reversed for rtl */
     if (QApplication::layoutDirection() == Qt::RightToLeft)
     {
-        ui->actionRightTab->setShortcut (QKeySequence (Qt::ALT + Qt::Key_Left));
-        ui->actionLeftTab->setShortcut (QKeySequence (Qt::ALT + Qt::Key_Right));
+        ui->actionRightTab->setShortcut (QKeySequence (Qt::ALT | Qt::Key_Left));
+        ui->actionLeftTab->setShortcut (QKeySequence (Qt::ALT | Qt::Key_Right));
     }
 
     /* get the default (customizable) shortcuts before any change */
@@ -300,10 +300,10 @@
     ui->toolButtonPrv->setShortcut (QKeySequence (Qt::Key_F9));
     ui->toolButtonAll->setShortcut (QKeySequence (Qt::Key_F10));
 
-    QShortcut *zoomin = new QShortcut (QKeySequence (Qt::CTRL + Qt::Key_Equal), this);
-    QShortcut *zoominPlus = new QShortcut (QKeySequence (Qt::CTRL + Qt::Key_Plus), this);
-    QShortcut *zoomout = new QShortcut (QKeySequence (Qt::CTRL + Qt::Key_Minus), this);
-    QShortcut *zoomzero = new QShortcut (QKeySequence (Qt::CTRL + Qt::Key_0), this);
+    QShortcut *zoomin = new QShortcut (QKeySequence (Qt::CTRL | Qt::Key_Equal), this);
+    QShortcut *zoominPlus = new QShortcut (QKeySequence (Qt::CTRL | Qt::Key_Plus), this);
+    QShortcut *zoomout = new QShortcut (QKeySequence (Qt::CTRL | Qt::Key_Minus), this);
+    QShortcut *zoomzero = new QShortcut (QKeySequence (Qt::CTRL | Qt::Key_0), this);
     connect (zoomin, &QShortcut::activated, this, &FPwin::zoomIn);
     connect (zoominPlus, &QShortcut::activated, this, &FPwin::zoomIn);
     connect (zoomout, &QShortcut::activated, this, &FPwin::zoomOut);
@@ -321,7 +321,7 @@
     connect (align, &QShortcut::activated, this, &FPwin::align);*/
 
     /* exiting a process */
-    QShortcut *kill = new QShortcut (QKeySequence (Qt::CTRL + Qt::ALT + Qt::Key_E), this);
+    QShortcut *kill = new QShortcut (QKeySequence (Qt::CTRL | Qt::ALT | Qt::Key_E), this);
     connect (kill, &QShortcut::activated, this, &FPwin::exitProcess);
 
     dummyWidget = new QWidget();
@@ -353,7 +353,7 @@
         Config& config = singleton->getConfig();
         if (config.getRemSize() && windowState() == Qt::WindowNoState)
             config.setWinSize (size());
-        if (config.getRemPos())
+        if (config.getRemPos() && !static_cast<FPsingleton*>(qApp)->isWayland())
             config.setWinPos (pos());
         if (sidePane_ && config.getRemSplitterPos())
         {
@@ -366,6 +366,34 @@
     }
 }
 /*************************/
+// This method should be called only when the app quits without closing its windows
+// (e.g., with SIGTERM). It saves the important info that can be queried only at the
+// session end and, for now, covers cursor positions of sessions and last files.
+void FPwin::saveInfoOnTerminating (Config &config, bool isLastWin)
+{
+    lastWinFilesCur_.clear();
+    for (int i = 0; i < ui->tabWidget->count(); ++i)
+    {
+        if (TabPage *tabPage = qobject_cast<TabPage*>(ui->tabWidget->widget (i)))
+        {
+            TextEdit *textEdit = tabPage->textEdit();
+            QString fileName = textEdit->getFileName();
+            if (!fileName.isEmpty())
+            {
+                if (textEdit->getSaveCursor())
+                    config.saveCursorPos (fileName, textEdit->textCursor().position());
+                if (isLastWin && config.getSaveLastFilesList()
+                    && lastWinFilesCur_.size() < MAX_LAST_WIN_FILES
+                    && QFile::exists (fileName))
+                {
+                    lastWinFilesCur_.insert (fileName, textEdit->textCursor().position());
+                }
+            }
+        }
+    }
+    config.setLastFileCursorPos (lastWinFilesCur_);
+}
+/*************************/
 void FPwin::toggleSidePane()
 {
     Config& config = static_cast<FPsingleton*>(qApp)->getConfig();
@@ -376,7 +404,7 @@
         sidePane_ = new SidePane();
         ui->splitter->insertWidget (0, sidePane_);
         sidePane_->listWidget()->setFocus();
-        int mult = size().width() / 100; // for more precision
+        int mult = qMax (size().width(), 100) / 100; // for more precision
         int sp = config.getSplitterPos();
         QList<int> sizes;
         sizes << sp * mult << (100 - sp) * mult;
@@ -401,6 +429,7 @@
                    and, on the other hand, KDE's auto-mnemonics may interfere */
                 QString fname = tabPage->textEdit()->getFileName();
                 bool isLink (false);
+                bool hasFinalTarget (false);
                 if (fname.isEmpty())
                 {
                     if (tabPage->textEdit()->getProg() == "help")
@@ -410,13 +439,21 @@
                 }
                 else
                 {
-                    isLink = QFileInfo (fname).isSymLink();
+                    QFileInfo info (fname);
+                    isLink = info.isSymLink();
+                    if (!isLink)
+                    {
+                        const QString finalTarget = info.canonicalFilePath();
+                        hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != fname);
+                    }
                     fname = fname.section ('/', -1);
                 }
                 if (tabPage->textEdit()->document()->isModified())
                     fname.append ("*");
                 fname.replace ("\n", " ");
-                ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg") : QIcon(),
+                ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg")
+                                                                 : hasFinalTarget ? QIcon (":icons/hasTarget.svg")
+                                                                                  : QIcon(),
                                                           fname, lw);
                 lwi->setToolTip (ui->tabWidget->tabToolTip (i));
                 sideItems_.insert (lwi, tabPage);
@@ -511,7 +548,7 @@
         resize (startSize);
     }
 
-    if (config.getRemPos())
+    if (config.getRemPos() && !static_cast<FPsingleton*>(qApp)->isWayland())
         move (config.getWinPos());
 
     ui->mainToolBar->setVisible (!config.getNoToolbar());
@@ -638,23 +675,23 @@
     { // the reserved shortcuts list could also be in "singleton.cpp"
         QStringList reserved;
                     /* QPLainTextEdit */
-        reserved << QKeySequence (Qt::CTRL + Qt::SHIFT + Qt::Key_Z).toString() << QKeySequence (Qt::CTRL + Qt::Key_Z).toString() << QKeySequence (Qt::CTRL + Qt::Key_X).toString() << QKeySequence (Qt::CTRL + Qt::Key_C).toString() << QKeySequence (Qt::CTRL + Qt::Key_V).toString() << QKeySequence (Qt::CTRL + Qt::Key_A).toString()
-                 << QKeySequence (Qt::SHIFT + Qt::Key_Insert).toString() << QKeySequence (Qt::SHIFT + Qt::Key_Delete).toString() << QKeySequence (Qt::CTRL + Qt::Key_Insert).toString()
-                 << QKeySequence (Qt::CTRL + Qt::Key_Left).toString() << QKeySequence (Qt::CTRL + Qt::Key_Right).toString() << QKeySequence (Qt::CTRL + Qt::Key_Up).toString() << QKeySequence (Qt::CTRL + Qt::Key_Down).toString()
-                 << QKeySequence (Qt::CTRL + Qt::Key_Home).toString() << QKeySequence (Qt::CTRL + Qt::Key_End).toString()
-                 << QKeySequence (Qt::CTRL + Qt::SHIFT + Qt::Key_Up).toString() << QKeySequence (Qt::CTRL + Qt::SHIFT + Qt::Key_Down).toString()
-                 << QKeySequence (Qt::META + Qt::Key_Up).toString() << QKeySequence (Qt::META + Qt::Key_Down).toString() << QKeySequence (Qt::META + Qt::SHIFT + Qt::Key_Up).toString() << QKeySequence (Qt::META + Qt::SHIFT + Qt::Key_Down).toString()
+        reserved << QKeySequence (Qt::CTRL | Qt::SHIFT | Qt::Key_Z).toString() << QKeySequence (Qt::CTRL | Qt::Key_Z).toString() << QKeySequence (Qt::CTRL | Qt::Key_X).toString() << QKeySequence (Qt::CTRL | Qt::Key_C).toString() << QKeySequence (Qt::CTRL | Qt::Key_V).toString() << QKeySequence (Qt::CTRL | Qt::Key_A).toString()
+                 << QKeySequence (Qt::SHIFT | Qt::Key_Insert).toString() << QKeySequence (Qt::SHIFT | Qt::Key_Delete).toString() << QKeySequence (Qt::CTRL | Qt::Key_Insert).toString()
+                 << QKeySequence (Qt::CTRL | Qt::Key_Left).toString() << QKeySequence (Qt::CTRL | Qt::Key_Right).toString() << QKeySequence (Qt::CTRL | Qt::Key_Up).toString() << QKeySequence (Qt::CTRL | Qt::Key_Down).toString() << QKeySequence (Qt::CTRL | Qt::Key_PageUp).toString() << QKeySequence (Qt::CTRL | Qt::Key_PageDown).toString()
+                 << QKeySequence (Qt::CTRL | Qt::Key_Home).toString() << QKeySequence (Qt::CTRL | Qt::Key_End).toString()
+                 << QKeySequence (Qt::CTRL | Qt::SHIFT | Qt::Key_Up).toString() << QKeySequence (Qt::CTRL | Qt::SHIFT | Qt::Key_Down).toString()
+                 << QKeySequence (Qt::META | Qt::Key_Up).toString() << QKeySequence (Qt::META | Qt::Key_Down).toString() << QKeySequence (Qt::META | Qt::SHIFT | Qt::Key_Up).toString() << QKeySequence (Qt::META | Qt::SHIFT | Qt::Key_Down).toString()
 
                     /* search and replacement */
                  << QKeySequence (Qt::Key_F3).toString() << QKeySequence (Qt::Key_F4).toString() << QKeySequence (Qt::Key_F5).toString() << QKeySequence (Qt::Key_F6).toString() << QKeySequence (Qt::Key_F7).toString()
                  << QKeySequence (Qt::Key_F8).toString() << QKeySequence (Qt::Key_F9).toString() << QKeySequence (Qt::Key_F10).toString()
                  << QKeySequence (Qt::Key_F11).toString()
 
-                 << QKeySequence (Qt::CTRL + Qt::Key_Equal).toString() << QKeySequence (Qt::CTRL + Qt::Key_Plus).toString() << QKeySequence (Qt::CTRL + Qt::Key_Minus).toString() << QKeySequence (Qt::CTRL + Qt::Key_0).toString() // zooming
-                 << QKeySequence (Qt::CTRL + Qt::ALT + Qt::Key_E).toString() // exiting a process
-                 << QKeySequence (Qt::SHIFT + Qt::Key_Enter).toString() << QKeySequence (Qt::SHIFT + Qt::Key_Return).toString() << QKeySequence (Qt::CTRL + Qt::Key_Tab).toString() << QKeySequence (Qt::CTRL + Qt::META + Qt::Key_Tab).toString() // text tabulation
-                 << QKeySequence (Qt::CTRL + Qt::SHIFT + Qt::Key_J).toString() // select text on jumping (not an action)
-                 << QKeySequence (Qt::CTRL + Qt::Key_K).toString(); // used by LineEdit as well as QPlainTextEdit
+                 << QKeySequence (Qt::CTRL | Qt::Key_Equal).toString() << QKeySequence (Qt::CTRL | Qt::Key_Plus).toString() << QKeySequence (Qt::CTRL | Qt::Key_Minus).toString() << QKeySequence (Qt::CTRL | Qt::Key_0).toString() // zooming
+                 << QKeySequence (Qt::CTRL | Qt::ALT | Qt::Key_E).toString() // exiting a process
+                 << QKeySequence (Qt::SHIFT | Qt::Key_Enter).toString() << QKeySequence (Qt::SHIFT | Qt::Key_Return).toString() << QKeySequence (Qt::Key_Tab).toString() << QKeySequence (Qt::CTRL | Qt::Key_Tab).toString() << QKeySequence (Qt::CTRL | Qt::META | Qt::Key_Tab).toString() // text tabulation
+                 << QKeySequence (Qt::CTRL | Qt::SHIFT | Qt::Key_J).toString() // select text on jumping (not an action)
+                 << QKeySequence (Qt::CTRL | Qt::Key_K).toString(); // used by LineEdit as well as QPlainTextEdit
         config.setReservedShortcuts (reserved);
         config.readShortcuts();
     }
@@ -670,6 +707,18 @@
 
     if (config.getAutoSave())
         startAutoSaving (true, config.getAutoSaveInterval());
+
+    if (config.getDisableMenubarAccel())
+    {
+        const auto menubarActions = ui->menuBar->actions();
+        for (const auto &action : menubarActions)
+        {
+            QString txt = action->text();
+            txt.remove (QRegularExpression (QStringLiteral ("\\s*\\(&[a-zA-Z0-9]\\)\\s*"))); // Chinese. Japanese,...
+            txt.remove (QLatin1Char ('&')); // other languages
+            action->setText (txt);
+        }
+    }
 }
 /*************************/
 void FPwin::addCursorPosLabel()
@@ -691,11 +740,11 @@
     { // no "url" for the language button
         langList << "c" << "cmake" << "config" << "cpp" << "css"
                  << "dart" << "deb" << "desktop" << "diff" << "fountain"
-                 << "html" << "javascript" << "LaTeX" << "log" << "lua"
-                 << "m3u" << "markdown" << "makefile" << "perl" << "php"
-                 << "python" << "qmake" << "qml" << "reST" << "ruby"
-                 << "scss" << "sh" << "troff" << "theme" << "xml"
-                 << "yaml";
+                 << "html" << "java" << "javascript" << "json" << "LaTeX"
+                 << "go" << "log" << "lua" << "m3u" << "markdown"
+                 << "makefile" << "pascal" << "perl" << "php" << "python"
+                 << "qmake" << "qml" << "reST" << "ruby" << "scss"
+                 << "sh" << "troff" << "theme" << "xml" << "yaml";
         langList.sort (Qt::CaseInsensitive);
     }
 
@@ -1126,7 +1175,10 @@
 {
     if (locked_) return;
     if (event->mimeData()->hasFormat ("application/featherpad-tab"))
-        dropTab (QString::fromUtf8 (event->mimeData()->data ("application/featherpad-tab").constData()));
+    {
+        dropTab (QString::fromUtf8 (event->mimeData()->data ("application/featherpad-tab").constData()),
+                 event->source());
+    }
     else
     {
         const QList<QUrl> urlList = event->mimeData()->urls();
@@ -1342,10 +1394,10 @@
     }
     else
     {
-        ui->actionCut->setShortcut (QKeySequence (Qt::CTRL+ Qt::Key_X));
-        ui->actionCopy->setShortcut (QKeySequence (Qt::CTRL+ Qt::Key_C));
-        ui->actionPaste->setShortcut (QKeySequence (Qt::CTRL+ Qt::Key_V));
-        ui->actionSelectAll->setShortcut (QKeySequence (Qt::CTRL+ Qt::Key_A));
+        ui->actionCut->setShortcut (QKeySequence (Qt::CTRL | Qt::Key_X));
+        ui->actionCopy->setShortcut (QKeySequence (Qt::CTRL | Qt::Key_C));
+        ui->actionPaste->setShortcut (QKeySequence (Qt::CTRL | Qt::Key_V));
+        ui->actionSelectAll->setShortcut (QKeySequence (Qt::CTRL | Qt::Key_A));
 
         ui->toolButtonNext->setShortcut (QKeySequence (Qt::Key_F8));
         ui->toolButtonPrv->setShortcut (QKeySequence (Qt::Key_F9));
@@ -2018,6 +2070,7 @@
         index = ui->tabWidget->currentIndex(); // is never -1
 
     bool isLink (false);
+    bool hasFinalTarget (false);
     QString shownName;
     if (fileName.isEmpty())
     {
@@ -2032,6 +2085,11 @@
             setWindowTitle (fileName.contains ("/") ? fileName
                                                     : fInfo.absolutePath() + "/" + fileName);
         isLink = fInfo.isSymLink();
+        if (!isLink)
+        {
+            const QString finalTarget = fInfo.canonicalFilePath();
+            hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != fileName);
+        }
         shownName = fileName.section ('/', -1);
         shownName.replace ("\n", " "); // no multi-line tab text
     }
@@ -2043,6 +2101,8 @@
             wi->setText (shownName);
             if (isLink)
                 wi->setIcon (QIcon (":icons/link.svg"));
+            else if (hasFinalTarget)
+                wi->setIcon (QIcon (":icons/hasTarget.svg"));
             else
                 wi->setIcon (QIcon());
         }
@@ -2053,6 +2113,8 @@
     ui->tabWidget->setTabText (index, shownName);
     if (isLink)
         ui->tabWidget->setTabIcon (index, QIcon (":icons/link.svg"));
+    else if (hasFinalTarget)
+        ui->tabWidget->setTabIcon (index, QIcon (":icons/hasTarget.svg"));
     else
         ui->tabWidget->setTabIcon (index, QIcon());
 }
@@ -2695,6 +2757,7 @@
 
     QString fileName = tabPage->textEdit()->getFileName();
     QFileInfo info (fileName);
+    bool exists = info.exists();
     QString target = info.isSymLink() ? info.symLinkTarget() // consider symlinks too
                                       : fileName;
     FPsingleton *singleton = static_cast<FPsingleton*>(qApp);
@@ -2712,7 +2775,8 @@
             QFileInfo thisInfo (thisTextEdit->getFileName());
             QString thisTarget = thisInfo.isSymLink() ? thisInfo.symLinkTarget()
                                                       : thisTextEdit->getFileName();
-            if (thisTarget == target)
+            if (thisTarget == target
+                || (exists && thisInfo.exists() && info == thisInfo))
             {
                 res = true;
                 break;
@@ -2723,7 +2787,7 @@
     return res;
 }
 /*************************/
-void FPwin::enforceEncoding (QAction*)
+void FPwin::enforceEncoding (QAction *a)
 {
     /* here, we don't need to check if some files are loading
        because encoding has no keyboard shortcut or tool button */
@@ -2745,6 +2809,8 @@
         /* if the file is removed, close its tab to open a new one */
         if (!QFile::exists (fname))
             deleteTabPage (index, false, false);
+
+        a->setChecked (true); // the checked action might have been changed (to UTF-8) with saving
         loadText (fname, true, true,
                   0, 0,
                   textEdit->isUneditable(), false);
@@ -3543,10 +3609,7 @@
     {
         TextEdit *textEdit = tabPage->textEdit();
         if (!textEdit->isReadOnly())
-        {
-            QLocale l = textEdit->locale();
-            textEdit->insertPlainText (l.toUpper (textEdit->textCursor().selectedText()));
-        }
+            textEdit->insertPlainText (locale().toUpper (textEdit->textCursor().selectedText()));
     }
 }
 /*************************/
@@ -3556,10 +3619,7 @@
     {
         TextEdit *textEdit = tabPage->textEdit();
         if (!textEdit->isReadOnly())
-        {
-            QLocale l = textEdit->locale();
-            textEdit->insertPlainText (l.toLower (textEdit->textCursor().selectedText()));
-        }
+            textEdit->insertPlainText (locale().toLower (textEdit->textCursor().selectedText()));
     }
 }
 /*************************/
@@ -3594,7 +3654,7 @@
 
             cur.setPosition (start);
             cur.setPosition (end, QTextCursor::KeepAnchor);
-            QString str = textEdit->locale().toLower (cur.selectedText());
+            QString str = locale().toLower (cur.selectedText());
 
             start = 0;
             QRegularExpressionMatch match;
@@ -3831,7 +3891,7 @@
             QLabel *statusLabel = ui->statusBar->findChild<QLabel *>("statusLabel");
             statusLabel->setText (QString ("%1 <i>%2</i>")
                                   .arg (statusLabel->text())
-                                  .arg (textEdit->getWordNumber()));
+                                  .arg (locale().toString (textEdit->getWordNumber())));
         }
         showCursorPos();
     }
@@ -3866,8 +3926,8 @@
     QFont currentFont = textEdit->getDefaultFont();
     FontDialog fd (currentFont, this);
     fd.setWindowModality (Qt::WindowModal);
-    fd.move (x() + width()/2 - fd.width()/2,
-             y() + height()/2 - fd.height()/ 2);
+    /*fd.move (x() + width()/2 - fd.width()/2,
+             y() + height()/2 - fd.height()/ 2);*/
     if (fd.exec())
     {
         QFont newFont = fd.selectedFont();
@@ -4267,9 +4327,10 @@
     QString syntaxStr;
     if (textEdit->getProg() != "help" && textEdit->getProg() != "url")
         syntaxStr = "   <b>" + tr ("Syntax") + QString (":</b> <i>%1</i>").arg (textEdit->getProg());
-    QString lineStr = "   <b>" + tr ("Lines") + QString (":</b> <i>%1</i>").arg (lines);
+    QLocale l = locale();
+    QString lineStr = "   <b>" + tr ("Lines") + QString (":</b> <i>%1</i>").arg (l.toString (lines));
     QString selStr = "   <b>" + tr ("Sel. Chars")
-                     + QString (":</b> <i>%1</i>").arg (textEdit->textCursor().selectedText().size());
+                     + QString (":</b> <i>%1</i>").arg (l.toString (textEdit->textCursor().selectedText().size()));
     QString wordStr = "   <b>" + tr ("Words") + ":</b>";
 
     statusLabel->setText (encodStr + syntaxStr + lineStr + selStr + wordStr);
@@ -4278,6 +4339,7 @@
 // Change the status bar text when the selection changes.
 void FPwin::statusMsg()
 {
+    QLocale l = locale();
     QLabel *statusLabel = ui->statusBar->findChild<QLabel *>("statusLabel");
     int sel = qobject_cast< TabPage *>(ui->tabWidget->currentWidget())->textEdit()
               ->textCursor().selectedText().size();
@@ -4289,10 +4351,9 @@
     if (sel == 0)
     {
         QString prevSel = str.mid (i + 9, j - i - 13); // j - i - 13 --> j - (i + 9[":</b> <i>]") - 4["</i>"]
-        if (prevSel.toInt() == 0) return;
+        if (l.toInt (prevSel) == 0) return;
     }
-    QString charN;
-    charN.setNum (sel);
+    QString charN = l.toString (sel);
     str.replace (i + 9, j - i - 13, charN);
     statusLabel->setText (str);
 }
@@ -4400,7 +4461,7 @@
         wordButton->setVisible (false);
         statusLabel->setText (QString ("%1 <i>%2</i>")
                               .arg (statusLabel->text())
-                              .arg (words));
+                              .arg (locale().toString (words)));
         connect (textEdit->document(), &QTextDocument::contentsChange, this, &FPwin::updateWordInfo);
     }
     else if (charsRemoved > 0 || charsAdded > 0) // not if only the format is changed
@@ -4711,8 +4772,13 @@
      *******************************************************************/
 
     FPsingleton *singleton = static_cast<FPsingleton*>(qApp);
-    FPwin * dropTarget = singleton->newWin();
-    dropTarget->closeTabAtIndex (0);
+    FPwin *dropTarget = singleton->newWin();
+
+    /* remove the single empty tab, as in closeTabAtIndex() */
+    dropTarget->deleteTabPage (0, false, false);
+    dropTarget->ui->actionReload->setDisabled (true);
+    dropTarget->ui->actionSave->setDisabled (true);
+    dropTarget->enableWidgets (false);
 
     /* first, set the new info... */
     dropTarget->lastFile_ = textEdit->getFileName();
@@ -4720,10 +4786,19 @@
     textEdit->setRedSel (QList<QTextEdit::ExtraSelection>());
     /* ... then insert the detached widget... */
     dropTarget->enableWidgets (true); // the tab will be inserted and switched to below
+    QFileInfo lastFileInfo (dropTarget->lastFile_);
     bool isLink = dropTarget->lastFile_.isEmpty() ? false
-                                                  : QFileInfo (dropTarget->lastFile_).isSymLink();
+                                                  : lastFileInfo.isSymLink();
+    bool hasFinalTarget (false);
+    if (!isLink)
+    {
+        const QString finalTarget = lastFileInfo.canonicalFilePath();
+        hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != dropTarget->lastFile_);
+    }
     dropTarget->ui->tabWidget->insertTab (0, tabPage,
-                                          isLink ? QIcon (":icons/link.svg") : QIcon(),
+                                          isLink ? QIcon (":icons/link.svg")
+                                                 : hasFinalTarget ?  QIcon (":icons/hasTarget.svg")
+                                                                   : QIcon(),
                                           tabText);
     if (dropTarget->sidePane_)
     {
@@ -4741,7 +4816,9 @@
         if (textEdit->document()->isModified())
             fname.append ("*");
         fname.replace ("\n", " ");
-        ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg") : QIcon(),
+        ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg")
+                                                         : hasFinalTarget ? QIcon (":icons/hasTarget.svg")
+                                                                          : QIcon(),
                                                   fname, lw);
         lw->setToolTip (tooltip);
         dropTarget->sideItems_.insert (lwi, tabPage);
@@ -4753,6 +4830,7 @@
     QList<QTextEdit::ExtraSelection> es;
     if (ln || spin)
         es.prepend (textEdit->currentLineSelection());
+    es.append (textEdit->getBlueSel());
     textEdit->setExtraSelections (es);
 
     /* at last, set all properties correctly */
@@ -4803,7 +4881,7 @@
             QLabel *statusLabel = dropTarget->ui->statusBar->findChild<QLabel *>("statusLabel");
             statusLabel->setText (QString ("%1 <i>%2</i>")
                                   .arg (statusLabel->text())
-                                  .arg (textEdit->getWordNumber()));
+                                  .arg (locale().toString (textEdit->getWordNumber())));
             connect (textEdit->document(), &QTextDocument::contentsChange, dropTarget, &FPwin::updateWordInfo);
         }
         connect (textEdit, &QPlainTextEdit::blockCountChanged, dropTarget, &FPwin::statusMsgWithLineCount);
@@ -4848,35 +4926,22 @@
     dropTarget->stealFocus();
 }
 /*************************/
-void FPwin::dropTab (const QString& str)
+void FPwin::dropTab (const QString& str, QObject *source)
 {
-#if (QT_VERSION >= QT_VERSION_CHECK(5,15,0))
-    QStringList list = str.split ("+", Qt::SkipEmptyParts);
-#else
-    QStringList list = str.split ("+", QString::SkipEmptyParts);
-#endif
-    if (list.count() != 2)
+    QWidget *w = qobject_cast<QWidget*>(source);
+    if (w == nullptr || str.isEmpty()) // impossible
     {
         ui->tabWidget->tabBar()->finishMouseMoveEvent();
         return;
     }
-    int index = list.at (1).toInt();
+    int index = str.toInt();
     if (index <= -1) // impossible
     {
         ui->tabWidget->tabBar()->finishMouseMoveEvent();
         return;
     }
 
-    FPsingleton *singleton = static_cast<FPsingleton*>(qApp);
-    FPwin *dragSource = nullptr;
-    for (int i = 0; i < singleton->Wins.count(); ++i)
-    {
-        if (singleton->Wins.at (i)->winId() == list.at (0).toULongLong())
-        {
-            dragSource = singleton->Wins.at (i);
-            break;
-        }
-    }
+    FPwin *dragSource = qobject_cast<FPwin*>(w->window());
     if (dragSource == this
         || dragSource == nullptr) // impossible
     {
@@ -4884,11 +4949,17 @@
         return;
     }
 
-    Config config = static_cast<FPsingleton*>(qApp)->getConfig();
-
     closeWarningBar();
     dragSource->closeWarningBar();
 
+    TabPage *tabPage = qobject_cast< TabPage *>(dragSource->ui->tabWidget->widget (index));
+    if (tabPage == nullptr)
+    {
+        ui->tabWidget->tabBar()->finishMouseMoveEvent();
+        return;
+    }
+    TextEdit *textEdit = tabPage->textEdit();
+
     QString tooltip = dragSource->ui->tabWidget->tabToolTip (index);
     QString tabText = dragSource->ui->tabWidget->tabText (index);
     bool spin = false;
@@ -4898,13 +4969,7 @@
     if (dragSource->ui->actionLineNumbers->isChecked())
         ln = true;
 
-    TabPage *tabPage = qobject_cast< TabPage *>(dragSource->ui->tabWidget->widget (index));
-    if (tabPage == nullptr)
-    {
-        ui->tabWidget->tabBar()->finishMouseMoveEvent();
-        return;
-    }
-    TextEdit *textEdit = tabPage->textEdit();
+    Config config = static_cast<FPsingleton*>(qApp)->getConfig();
 
     disconnect (textEdit, &TextEdit::resized, dragSource, &FPwin::hlight);
     disconnect (textEdit, &TextEdit::updateRect, dragSource, &FPwin::hlight);
@@ -4981,9 +5046,18 @@
         enableWidgets (true);
     else if (ui->tabWidget->count() == 1)
         updateGUIForSingleTab (false); // tab detach and switch actions
-    bool isLink = lastFile_.isEmpty() ? false : QFileInfo (lastFile_).isSymLink();
+    QFileInfo lastFileInfo (lastFile_);
+    bool isLink = lastFile_.isEmpty() ? false : lastFileInfo.isSymLink();
+    bool hasFinalTarget (false);
+    if (!isLink)
+    {
+        const QString finalTarget = lastFileInfo.canonicalFilePath();
+        hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != lastFile_);
+    }
     ui->tabWidget->insertTab (insertIndex, tabPage,
-                              isLink ? QIcon (":icons/link.svg") : QIcon(),
+                              isLink ? QIcon (":icons/link.svg")
+                                     : hasFinalTarget ? QIcon (":icons/hasTarget.svg")
+                                                      : QIcon(),
                               tabText);
     if (sidePane_)
     {
@@ -5001,7 +5075,9 @@
         if (textEdit->document()->isModified())
             fname.append ("*");
         fname.replace ("\n", " ");
-        ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg") : QIcon(),
+        ListWidgetItem *lwi = new ListWidgetItem (isLink ? QIcon (":icons/link.svg")
+                                                         : hasFinalTarget ? QIcon (":icons/hasTarget.svg")
+                                                                          : QIcon(),
                                                   fname, lw);
         lw->setToolTip (tooltip);
         sideItems_.insert (lwi, tabPage);
@@ -5017,6 +5093,7 @@
     {
         es.prepend (textEdit->currentLineSelection());
     }
+    es.append (textEdit->getBlueSel());
     textEdit->setExtraSelections (es);
 
     /* at last, set all properties correctly */
@@ -5143,26 +5220,52 @@
         menu.addAction (ui->actionCopyName);
         menu.addAction (ui->actionCopyPath);
         QFileInfo info (fname);
+        const QString finalTarget = info.canonicalFilePath();
+        bool hasFinalTarget = false;
         if (info.isSymLink())
         {
             menu.addSeparator();
+            const QString symTarget = info.symLinkTarget();
+            hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != symTarget);
             QAction *action = menu.addAction (QIcon (":icons/link.svg"), tr ("Copy Target Path"));
-            connect (action, &QAction::triggered, [info] {
-                QApplication::clipboard()->setText (info.symLinkTarget());
+            connect (action, &QAction::triggered, [symTarget] {
+                QApplication::clipboard()->setText (symTarget);
             });
             action = menu.addAction (QIcon (":icons/link.svg"), tr ("Open Target Here"));
-            connect (action, &QAction::triggered, this, [this, info] {
-                QString targetName = info.symLinkTarget();
+            connect (action, &QAction::triggered, this, [this, symTarget] {
+                for (int i = 0; i < ui->tabWidget->count(); ++i)
+                {
+                    TabPage *thisTabPage = qobject_cast<TabPage*>(ui->tabWidget->widget (i));
+                    if (symTarget == thisTabPage->textEdit()->getFileName())
+                    {
+                        ui->tabWidget->setCurrentWidget (thisTabPage);
+                        return;
+                    }
+                }
+                newTabFromName (symTarget, 0, 0);
+            });
+        }
+        else
+            hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != fname);
+        if (hasFinalTarget)
+        {
+            menu.addSeparator();
+            QAction *action = menu.addAction (QIcon (":icons/hasTarget.svg"), tr ("Copy Final Target Path"));
+            connect (action, &QAction::triggered, [finalTarget] {
+                QApplication::clipboard()->setText (finalTarget);
+            });
+            action = menu.addAction (QIcon (":icons/hasTarget.svg"), tr ("Open Final Target Here"));
+            connect (action, &QAction::triggered, this, [this, finalTarget] {
                 for (int i = 0; i < ui->tabWidget->count(); ++i)
                 {
                     TabPage *thisTabPage = qobject_cast<TabPage*>(ui->tabWidget->widget (i));
-                    if (targetName == thisTabPage->textEdit()->getFileName())
+                    if (finalTarget == thisTabPage->textEdit()->getFileName())
                     {
                         ui->tabWidget->setCurrentWidget (thisTabPage);
                         return;
                     }
                 }
-                newTabFromName (targetName, 0, 0);
+                newTabFromName (finalTarget, 0, 0);
             });
         }
         if (QFile::exists (fname))
@@ -5227,27 +5330,54 @@
         menu.addAction (ui->actionCopyName);
         menu.addAction (ui->actionCopyPath);
         QFileInfo info (fname);
+        const QString finalTarget = info.canonicalFilePath();
+        bool hasFinalTarget = false;
         if (info.isSymLink())
         {
             menu.addSeparator();
+            const QString symTarget = info.symLinkTarget();
+            hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != symTarget);
             QAction *action = menu.addAction (QIcon (":icons/link.svg"), tr ("Copy Target Path"));
-            connect (action, &QAction::triggered, [info] {
-                QApplication::clipboard()->setText (info.symLinkTarget());
+            connect (action, &QAction::triggered, [symTarget] {
+                QApplication::clipboard()->setText (symTarget);
             });
             action = menu.addAction (QIcon (":icons/link.svg"), tr ("Open Target Here"));
-            connect (action, &QAction::triggered, this, [this, info] {
-                QString targetName = info.symLinkTarget();
+            connect (action, &QAction::triggered, this, [this, symTarget] {
+                for (int i = 0; i < ui->tabWidget->count(); ++i)
+                {
+                    TabPage *thisTabPage = qobject_cast<TabPage*>(ui->tabWidget->widget (i));
+                    if (symTarget == thisTabPage->textEdit()->getFileName())
+                    {
+                        if (QListWidgetItem *wi = sideItems_.key (thisTabPage))
+                            sidePane_->listWidget()->setCurrentItem (wi); // sets the current widget at changeTab()
+                        return;
+                    }
+                }
+                newTabFromName (symTarget, 0, 0);
+            });
+        }
+        else
+            hasFinalTarget = (!finalTarget.isEmpty() && finalTarget != fname);
+        if (hasFinalTarget)
+        {
+            menu.addSeparator();
+            QAction *action = menu.addAction (QIcon (":icons/hasTarget.svg"), tr ("Copy Final Target Path"));
+            connect (action, &QAction::triggered, [finalTarget] {
+                QApplication::clipboard()->setText (finalTarget);
+            });
+            action = menu.addAction (QIcon (":icons/hasTarget.svg"), tr ("Open Final Target Here"));
+            connect (action, &QAction::triggered, this, [this, finalTarget] {
                 for (int i = 0; i < ui->tabWidget->count(); ++i)
                 {
                     TabPage *thisTabPage = qobject_cast<TabPage*>(ui->tabWidget->widget (i));
-                    if (targetName == thisTabPage->textEdit()->getFileName())
+                    if (finalTarget == thisTabPage->textEdit()->getFileName())
                     {
                         if (QListWidgetItem *wi = sideItems_.key (thisTabPage))
                             sidePane_->listWidget()->setCurrentItem (wi); // sets the current widget at changeTab()
                         return;
                     }
                 }
-                newTabFromName (targetName, 0, 0);
+                newTabFromName (finalTarget, 0, 0);
             });
         }
         if (QFile::exists (fname))
@@ -5449,7 +5579,10 @@
     textEdit->ensureCursorVisible();
 
     updateShortcuts (true);
-    SpellDialog dlg (spellChecker, word, this);
+    SpellDialog dlg (spellChecker, word,
+                     /* disable the correcting buttons if the text isn't editable */
+                     !textEdit->isReadOnly() && !textEdit->isUneditable(),
+                     this);
     dlg.setWindowTitle (tr ("Spell Checking"));
 
     connect (&dlg, &SpellDialog::spellChecked, [&dlg, textEdit] (int res) {
@@ -5514,7 +5647,8 @@
         {
             if (!corrected.isEmpty())
             {
-                cur.insertText (corrected);
+                if (!uneditable)
+                    cur.insertText (corrected);
                 corrected = QString();
             }
             else
diff -Nru featherpad-0.17.1/featherpad/fpwin.h featherpad-1.0.1/featherpad/fpwin.h
--- featherpad-0.17.1/featherpad/fpwin.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/fpwin.h	2021-10-15 02:56:34.000000000 +0200
@@ -23,7 +23,7 @@
 #include <QMainWindow>
 #include <QActionGroup>
 #include <QElapsedTimer>
-#include "highlighter.h"
+#include "highlighter/highlighter.h"
 #include "textedit.h"
 #include "tabpage.h"
 #include "sidepane.h"
@@ -44,6 +44,8 @@
     explicit FPwin (QWidget *parent = nullptr, bool standalone = false);
     ~FPwin();
 
+    void saveInfoOnTerminating (Config &config, bool isLastWin);
+
     bool isScriptLang (const QString& lang) const;
 
     bool isLoading() const {
@@ -112,7 +114,7 @@
     void closeOtherPages();
     void fileOpen();
     void reload();
-    void enforceEncoding (QAction*);
+    void enforceEncoding (QAction *a);
     void cutText();
     void copyText();
     void pasteText();
@@ -208,7 +210,7 @@
       DISCARDED
     };
 
-    TabPage *createEmptyTab(bool setCurrent, bool allowNormalHighlighter = true);
+    TabPage* createEmptyTab(bool setCurrent, bool allowNormalHighlighter = true);
     bool hasAnotherDialog();
     void deleteTabPage (int tabIndex, bool saveToList = false, bool closeWithLastTab = true);
     void loadText (const QString& fileName, bool enforceEncod, bool reload,
@@ -233,7 +235,7 @@
     bool closePages (int first, int last, bool saveFilesList = false);
     void dragEnterEvent (QDragEnterEvent *event);
     void dropEvent (QDropEvent *event);
-    void dropTab (const QString& str);
+    void dropTab (const QString& str, QObject *source);
     void changeEvent (QEvent *event);
     bool event (QEvent *event);
     QTextDocument::FindFlags getSearchFlags() const;
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter.cpp featherpad-1.0.1/featherpad/highlighter/highlighter.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,4514 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+#include <QTextDocument>
+
+Q_DECLARE_METATYPE(QTextBlock)
+
+namespace FeatherPad {
+
+/* NOTE: It is supposed that a URL does not end with a punctuation mark, parenthesis, bracket or single-quotation mark. */
+const QRegularExpression Highlighter::urlPattern ("[A-Za-z0-9_\\-]+://((?!"|>|<)[A-Za-z0-9_.+/\\?\\=~&%#,;!@\\*\'\\-:\\(\\)\\[\\]])+(?<!\\.|\\?|!|:|;|,|\\(|\\)|\\[|\\]|\')|[A-Za-z0-9_.\\-]+@[A-Za-z0-9_\\-]+\\.[A-Za-z0-9.]+(?<!\\.)");
+const QRegularExpression Highlighter::notePattern ("\\b(NOTE|TODO|FIXME|WARNING)\\b");
+
+TextBlockData::~TextBlockData()
+{
+    while (!allParentheses.isEmpty())
+    {
+        ParenthesisInfo *info = allParentheses.at (0);
+        allParentheses.remove (0);
+        delete info;
+    }
+    while (!allBraces.isEmpty())
+    {
+        BraceInfo *info = allBraces.at (0);
+        allBraces.remove (0);
+        delete info;
+    }
+    while (!allBrackets.isEmpty())
+    {
+        BracketInfo *info = allBrackets.at (0);
+        allBrackets.remove (0);
+        delete info;
+    }
+}
+/*************************/
+QVector<ParenthesisInfo *> TextBlockData::parentheses() const
+{
+    return allParentheses;
+}
+/*************************/
+QVector<BraceInfo *> TextBlockData::braces() const
+{
+    return allBraces;
+}
+/*************************/
+QVector<BracketInfo *> TextBlockData::brackets() const
+{
+    return allBrackets;
+}
+/*************************/
+QString TextBlockData::labelInfo() const
+{
+    return label;
+}
+/*************************/
+bool TextBlockData::isHighlighted() const
+{
+    return Highlighted;
+}
+/*************************/
+bool TextBlockData::getProperty() const
+{
+    return Property;
+}
+/*************************/
+int TextBlockData::lastState() const
+{
+    return LastState;
+}
+/*************************/
+int TextBlockData::openNests() const
+{
+    return OpenNests;
+}
+/*************************/
+int TextBlockData::lastFormattedQuote() const
+{
+    return LastFormattedQuote;
+}
+/*************************/
+int TextBlockData::lastFormattedRegex() const
+{
+    return LastFormattedRegex;
+}
+/*************************/
+QSet<int> TextBlockData::openQuotes() const
+{
+    return OpenQuotes;
+}
+/*************************/
+void TextBlockData::insertInfo (ParenthesisInfo *info)
+{
+    int i = 0;
+    while (i < allParentheses.size()
+           && info->position > allParentheses.at (i)->position)
+    {
+        ++i;
+    }
+
+    allParentheses.insert (i, info);
+}
+/*************************/
+void TextBlockData::insertInfo (BraceInfo *info)
+{
+    int i = 0;
+    while (i < allBraces.size()
+           && info->position > allBraces.at (i)->position)
+    {
+        ++i;
+    }
+
+    allBraces.insert (i, info);
+}
+/*************************/
+void TextBlockData::insertInfo (BracketInfo *info)
+{
+    int i = 0;
+    while (i < allBrackets.size()
+           && info->position > allBrackets.at (i)->position)
+    {
+        ++i;
+    }
+
+    allBrackets.insert (i, info);
+}
+/*************************/
+void TextBlockData::insertInfo (const QString &str)
+{
+    label = str;
+}
+/*************************/
+void TextBlockData::setHighlighted()
+{
+    Highlighted = true;
+}
+/*************************/
+void TextBlockData::setProperty (bool p)
+{
+    Property = p;
+}
+/*************************/
+void TextBlockData::setLastState (int state)
+{
+    LastState = state;
+}
+/*************************/
+void TextBlockData::insertNestInfo (int nests)
+{
+    OpenNests = nests;
+}
+/*************************/
+void TextBlockData::insertLastFormattedQuote (int last)
+{
+    LastFormattedQuote = last;
+}
+/*************************/
+void TextBlockData::insertLastFormattedRegex (int last)
+{
+    LastFormattedRegex = last;
+}
+/*************************/
+void TextBlockData::insertOpenQuotes (const QSet<int> &openQuotes)
+{
+    OpenQuotes.unite (openQuotes);
+}
+/*************************/
+// Here, the order of formatting is important because of overrides.
+Highlighter::Highlighter (QTextDocument *parent, const QString& lang,
+                          const QTextCursor &start, const QTextCursor &end,
+                          bool darkColorScheme,
+                          bool showWhiteSpace,
+                          bool showEndings,
+                          int whitespaceValue,
+                          const QHash<QString, QColor> &syntaxColors) : QSyntaxHighlighter (parent)
+{
+    if (lang.isEmpty()) return;
+
+    if (showWhiteSpace || showEndings)
+    {
+        QTextOption opt =  document()->defaultTextOption();
+        QTextOption::Flags flags = opt.flags();
+        if (showWhiteSpace)
+            flags |= QTextOption::ShowTabsAndSpaces;
+        if (showEndings)
+            flags |= QTextOption::ShowLineAndParagraphSeparators
+                     | QTextOption::AddSpaceForLineAndParagraphSeparators // never show the horizontal scrollbar on wrapping
+                     | QTextOption::ShowDocumentTerminator;
+        opt.setFlags (flags);
+        document()->setDefaultTextOption (opt);
+    }
+
+    /* for highlighting next block inside highlightBlock() when needed */
+    qRegisterMetaType<QTextBlock>();
+
+    startCursor = start;
+    endCursor = end;
+    progLan = lang;
+
+    /* whether multiLineQuote() should be used in a normal way */
+    multilineQuote_ =
+        (progLan != "xml" // xmlQuotes() is used
+         && progLan != "sh" // SH_MultiLineQuote() is used
+         && progLan != "css" // cssHighlighter() is used
+         && progLan != "pascal" && progLan != "LaTeX"
+         && progLan != "diff" && progLan != "log"
+         && progLan != "desktop" && progLan != "config" && progLan != "theme"
+         && progLan != "changelog" && progLan != "url"
+         && progLan != "srt" && progLan != "html"
+         && progLan != "deb" && progLan != "m3u"
+         && progLan != "reST" && progLan != "troff"
+         && progLan != "yaml"); // yaml will be formated separately
+
+    /* only for isQuoted() and multiLineQuote() (not used with JS, qml and perl) */
+    mixedQuotes_ =
+        (progLan == "c" || progLan == "cpp" // single quotes can also show syntax errors
+         || progLan == "python"
+         || progLan == "sh" // not used in multiLineQuote()
+         || progLan == "makefile" || progLan == "cmake" || progLan == "lua"
+         || progLan == "xml" // never used because we should consider """
+         || progLan == "ruby"
+         || progLan == "html" // not used in multiLineQuote()
+         || progLan == "scss" || progLan == "yaml" || progLan == "dart"
+         || progLan == "go" || progLan == "php");
+
+    quoteMark.setPattern ("\""); // the standard quote mark (always a single character)
+    singleQuoteMark.setPattern ("\'"); // will be changed only for Go
+    mixedQuoteMark.setPattern ("\"|\'"); // will be changed only for Go
+    backQuote.setPattern ("`");
+    /* includes Perl's backquote operator and JavaScript's template literal */
+    mixedQuoteBackquote.setPattern ("\"|\'|`");
+
+    HighlightingRule rule;
+
+    QColor Faded (whitespaceValue, whitespaceValue, whitespaceValue);
+    QColor TextColor, neutralColor, translucent;
+    if (syntaxColors.size() == 11)
+    {
+        /* NOTE: All 11 + 1 colors should be valid, opaque and different from each other
+                 but we don't check them here because "FeatherPad::Config" gets them so. */
+        Blue = syntaxColors.value ("function");
+        Magenta = syntaxColors.value ("BuiltinFunction");
+        Red = syntaxColors.value ("comment");
+        DarkGreen = syntaxColors.value ("quote");
+        DarkMagenta = syntaxColors.value ("type");
+        DarkBlue = syntaxColors.value ("keyWord");
+        Brown = syntaxColors.value ("number");
+        DarkRed = syntaxColors.value ("regex");
+        Violet = syntaxColors.value ("xmlElement");
+        Verda = syntaxColors.value ("cssValue");
+        DarkYellow = syntaxColors.value ("other");
+
+        QList<QColor> colors;
+        colors << Blue << Magenta << Red << DarkGreen << DarkMagenta << DarkBlue << Brown << DarkRed << Violet << Verda << DarkYellow << Faded;
+
+        /* extra colors */
+        if (!darkColorScheme)
+        {
+            TextColor =  QColor (Qt::black);
+            neutralColor = QColor (1, 1, 1);
+            translucent = QColor (0, 0, 0, 190); // for huge lines
+        }
+        else
+        {
+            TextColor =  QColor (Qt::white);
+            neutralColor = QColor (254, 254, 254);
+            translucent = QColor (255, 255, 255, 190);
+        }
+
+        int i = 0;
+        while (colors.contains (TextColor))
+        {
+            ++i;
+            if (!darkColorScheme)
+                TextColor = QColor (i, i, i);
+            else
+                TextColor = QColor (255 - i, 255 - i, 255 - i);
+        }
+        colors << TextColor;
+
+        while (colors.contains (neutralColor))
+        {
+            ++i;
+            if (!darkColorScheme)
+                neutralColor = QColor (i, i, i);
+            else
+                neutralColor = QColor (255 - i, 255 - i, 255 - i);
+        }
+        colors << neutralColor;
+
+        DarkGreenAlt = DarkGreen.lighter (101);
+        if (DarkGreenAlt == DarkGreen)
+        {
+            DarkGreenAlt = QColor (DarkGreen.red() > 127 ? DarkGreen.red() - 1 : DarkGreen.red() + 1,
+                                   DarkGreen.green() > 127 ? DarkGreen.green() - 1 : DarkGreen.green() + 1,
+                                   DarkGreen.blue() > 127 ? DarkGreen.blue() - 1 : DarkGreen.blue() + 1);
+        }
+        while (colors.contains (DarkGreenAlt))
+        {
+            DarkGreenAlt = QColor (DarkGreen.red() > 127 ? DarkGreenAlt.red() - 1 : DarkGreenAlt.red() + 1,
+                                   DarkGreen.green() > 127 ? DarkGreenAlt.green() - 1 : DarkGreenAlt.green() + 1,
+                                   DarkGreen.blue() > 127 ? DarkGreenAlt.blue() - 1 : DarkGreenAlt.blue() + 1);
+        }
+    }
+    else // built-in colors (this block is never reached but is kept for the sake of consistency)
+    {
+        if (!darkColorScheme)
+        {
+            TextColor =  QColor (Qt::black);
+            neutralColor = QColor (1, 1, 1);
+            Blue = QColor (Qt::blue);
+            DarkBlue = QColor (Qt::darkBlue);
+            Red = QColor (Qt::red);
+            DarkRed = QColor (150, 0, 0);
+            Verda = QColor (0, 110, 110);
+            DarkGreen = QColor (Qt::darkGreen);
+            DarkMagenta = QColor (Qt::darkMagenta);
+            Violet = QColor (126, 0, 230); // #7e00e6
+            Brown = QColor (150, 85, 0);
+            DarkYellow = QColor (100, 100, 0); // Qt::darkYellow is (180, 180, 0)
+            translucent = QColor (0, 0, 0, 190);
+        }
+        else
+        {
+            TextColor =  QColor (Qt::white);
+            neutralColor = QColor (254, 254, 254);
+            Blue = QColor (85, 227, 255);
+            DarkBlue = QColor (65, 154, 255);
+            Red = QColor (255, 120, 120);
+            DarkRed = QColor (255, 160, 0);
+            Verda = QColor (150, 255, 0);
+            DarkGreen = QColor (Qt::green);
+            DarkMagenta = QColor (255, 153, 255);
+            Violet = QColor (255, 255, 1); // near Qt::yellow (= DarkYellow)
+            Brown = QColor (255, 205, 0);
+            DarkYellow = QColor (Qt::yellow);
+            translucent = QColor (255, 255, 255, 190);
+        }
+        Magenta = QColor (Qt::magenta);
+        DarkGreenAlt = DarkGreen.lighter (101); // almost identical
+    }
+
+    mainFormat.setForeground (TextColor);
+    neutralFormat.setForeground (neutralColor);
+    whiteSpaceFormat.setForeground (Faded);
+    translucentFormat.setForeground (translucent);
+    translucentFormat.setFontItalic (true);
+
+    quoteFormat.setForeground (DarkGreen);
+    altQuoteFormat.setForeground (DarkGreen);
+    urlInsideQuoteFormat.setForeground (DarkGreen);
+    altQuoteFormat.setFontItalic (true);
+    urlInsideQuoteFormat.setFontItalic (true);
+    urlInsideQuoteFormat.setFontUnderline (true);
+    /*quoteStartExpression.setPattern ("\"([^\"'])");
+    quoteEndExpression.setPattern ("([^\"'])\"");*/
+    regexFormat.setForeground (DarkRed);
+
+    /*************************
+     * Functions and Numbers *
+     *************************/
+
+    /* there may be javascript inside html */
+    QString Lang = progLan == "html" ? "javascript" : progLan;
+
+    /* might be overridden by the keywords format */
+    if (progLan == "c" || progLan == "cpp"
+        || progLan == "lua" || progLan == "python"
+        || progLan == "php" || progLan == "dart"
+        || progLan == "go" || progLan == "java")
+    {
+        QTextCharFormat ft;
+
+        /* numbers (including the exponential notation, binary, octal and hexadecimal literals) */
+        ft.setForeground (Brown);
+        if (progLan == "python")
+            rule.pattern.setPattern ("(?<=^|[^\\w\\d\\.])("
+                                     "\\d*\\.\\d+|\\d+\\.|(\\d*\\.?\\d+|\\d+\\.)(e|E)(\\+|-)?\\d+"
+                                     "|"
+                                     "0[bB][01]+|0[xX][0-9a-fA-F]+"
+                                     "|"
+                                     "(0|[1-9]\\d*)(L|l)?" // digits
+                                     ")(?=[^\\w\\d\\.]|$)");
+        else if (progLan == "java")
+            rule.pattern.setPattern ("(?<=^|[^\\w\\d\\.])("
+                                     "(\\d*\\.\\d+|\\d+\\.)(L|l|F|f)?"
+                                     "|"
+                                     "(\\d*\\.?\\d+|\\d+\\.)(e|E)(\\+|-)?\\d+(F|f)?"
+                                     "|"
+                                     "0[xX]([0-9a-fA-F]*\\.?[0-9a-fA-F]+|[0-9a-fA-F]+\\.)(p|P)(\\+|-)?\\d+(F|f)?"
+                                     "|"
+                                     "([1-9]\\d*|0[0-7]*)(L|l|F|f)?|(0[xX][0-9a-fA-F]+|0[bB][01]+)(L|l)?" // integer
+                                     ")(?=[^\\w\\d\\.]|$)");
+        else
+            rule.pattern.setPattern ("(?<=^|[^\\w\\d\\.])("
+                                     "(\\d*\\.\\d+|\\d+\\.|(\\d*\\.?\\d+|\\d+\\.)(e|E)(\\+|-)?\\d+)(L|l|F|f)?"
+                                     /*"|"
+                                     "0[xX]([0-9a-fA-F]*\\.[0-9a-fA-F]+|[0-9a-fA-F]+\\.)(L|l)?"*/ // hexadecimal floating literals need exponent
+                                     "|"
+                                     "0[xX]([0-9a-fA-F]*\\.?[0-9a-fA-F]+|[0-9a-fA-F]+\\.)(p|P)(\\+|-)?\\d+(L|l|F|f)?"
+                                     "|"
+                                     "([1-9]\\d*|0[0-7]*|0[xX][0-9a-fA-F]+|0[bB][01]+)(L|l|U|u|UL|ul|LL|ll|ULL|ull)?" // integer
+                                     ")(?=[^\\w\\d\\.]|$)");
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        /* POSIX signals */
+        ft.setForeground (DarkYellow);
+        rule.pattern.setPattern ("\\b(SIGABRT|SIGIOT|SIGALRM|SIGVTALRM|SIGPROF|SIGBUS|SIGCHLD|SIGCONT|SIGFPE|SIGHUP|SIGILL|SIGINT|SIGKILL|SIGPIPE|SIGPOLL|SIGRTMIN|SIGRTMAX|SIGQUIT|SIGSEGV|SIGSTOP|SIGSYS|SIGTERM|SIGTSTP|SIGTTIN|SIGTTOU|SIGTRAP|SIGURG|SIGUSR1|SIGUSR2|SIGXCPU|SIGXFSZ|SIGWINCH)(?!(\\.|-|@|#|\\$))\\b");
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        ft.setFontItalic (true);
+        ft.setForeground (Blue);
+        /* before parentheses... */
+        rule.pattern.setPattern ("\\b[A-Za-z0-9_]+(?=\\s*\\()");
+        rule.format = ft;
+        highlightingRules.append (rule);
+        /* ... but make exception for what comes after "#define" */
+        if (progLan == "c" || progLan == "cpp")
+        {
+            rule.pattern.setPattern ("^\\s*#\\s*define\\s+[^\"\']+" // may contain slash but no quote
+                                     "(?=\\s*\\()");
+            rule.format = neutralFormat;
+            highlightingRules.append (rule);
+        }
+        else if (progLan == "python")
+        { // built-in functions
+            ft.setFontWeight (QFont::Bold);
+            ft.setForeground (Magenta);
+            rule.pattern.setPattern ("\\b(abs|add|all|append|any|as_integer_ratio|ascii|basestring|bin|bit_length|bool|bytearray|bytes|callable|c\\.conjugate|capitalize|center|chr|classmethod|clear|cmp|compile|complex|count|critical|debug|decode|delattr|dict|difference_update|dir|discard|divmod|encode|endswith|enumerate|error|eval|expandtabs|exception|exec|execfile|extend|file|filter|find|float|format|fromhex|fromkeys|frozenset|get|getattr|globals|hasattr|hash|has_key|help|hex|id|index|info|input|insert|int|intersection_update|isalnum|isalpha|isdecimal|isdigit|isinstance|islower|isnumeric|isspace|issubclass|istitle|items|iter|iteritems|iterkeys|itervalues|isupper|is_integer|join|keys|len|list|ljust|locals|log|long|lower|lstrip|map|max|memoryview|min|next|object|oct|open|ord|partition|pop|popitem|pow|print|property|range|raw_input|read|reduce|reload|remove|replace|repr|reverse|reversed|rfind|rindex|rjust|rpartition|round|rsplit|rstrip|run|seek|set|setattr|slice|sort|sorted|split|splitlines|staticmethod|startswith|str|strip|sum|super|symmetric_difference_update|swapcase|title|translate|tuple|type|unichr|unicode|update|upper|values|vars|viewitems|viewkeys|viewvalues|warning|write|xrange|zip|zfill|(__(abs|add|and|cmp|coerce|complex|contains|delattr|delete|delitem|delslice|div|divmod|enter|eq|exit|float|floordiv|ge|get|getattr|getattribute|getitem|getslice|gt|hex|iadd|iand|idiv|ifloordiv|ilshift|invert|imod|import|imul|init|instancecheck|index|int|ior|ipow|irshift|isub|iter|itruediv|ixor|le|len|long|lshift|lt|missing|mod|mul|neg|nonzero|oct|or|pos|pow|radd|rand|rdiv|rdivmod|reversed|rfloordiv|rlshift|rmod|rmul|ror|rpow|rshift|rsub|rrshift|rtruediv|rxor|set|setattr|setitem|setslice|sub|subclasses|subclasscheck|truediv|unicode|xor)__))(?=\\s*\\()");
+            rule.format = ft;
+            highlightingRules.append (rule);
+        }
+    }
+    else if (Lang == "javascript" || progLan == "qml")
+    {
+        QTextCharFormat ft;
+
+        /* before dot but not after it (might be overridden by keywords) */
+        ft.setForeground (Blue);
+        ft.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("(?<![A-Za-z0-9_\\$\\.])\\s*[A-Za-z0-9_\\$]*[A-Za-z][A-Za-z0-9_\\$]*\\s*(?=\\.\\s*[A-Za-z0-9_\\$]*[A-Za-z][A-Za-z0-9_\\$]*)"); // "(?<![A-Za-z0-9_\\$])[A-Za-z0-9_\\$]+\\s*(?=\\.)"
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        /* before parentheses */
+        ft.setFontWeight (QFont::Normal);
+        ft.setFontItalic (true);
+        rule.pattern.setPattern ("(?<![A-Za-z0-9_\\$])[A-Za-z0-9_\\$]*[A-Za-z][A-Za-z0-9_\\$]*(?=\\s*\\()");
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        ft.setFontItalic (false);
+        ft.setFontWeight (QFont::Bold);
+        ft.setForeground (Magenta);
+        rule.pattern.setPattern ("\\b(?<!(@|#|\\$))(export|from|import|as)(?!(@|#|\\$|(\\s*:)))\\b");
+        rule.format = ft;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "troff")
+    {
+        QTextCharFormat troffFormat;
+
+        troffFormat.setForeground (Blue);
+        rule.pattern.setPattern ("^\\.\\s*[a-zA-Z]+");
+        rule.format = troffFormat;
+        highlightingRules.append (rule);
+
+        troffFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("^\\.\\s*[a-zA-Z]+\\K.*");
+        rule.format = troffFormat;
+        highlightingRules.append (rule);
+
+        /* numbers */
+        troffFormat.setForeground (Brown);
+        rule.pattern.setPattern ("(?<=^|[^\\w\\d@#\\$\\.])((\\d*\\.?\\d+|\\d+\\.)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)(?=[^\\d\\.]|$)");
+        rule.format = troffFormat;
+        highlightingRules.append (rule);
+
+        /* meaningful escapes */
+        troffFormat.setForeground (DarkGreen);
+        rule.pattern.setPattern ("\\\\(e|'|`|-|\\s|0|\\||\\^|&|\\!|\\\\\\$\\d+|%|\\(\\w{2}|\\\\\\*\\w|\\*\\(\\w{2}|a|b(?='\\w)|c|d|D|f(\\w|\\(\\w{2})|(h|H)(?='\\d)|(j|k)\\w|l|L|n(\\w|\\(\\w{2})|o|p|r|s|S(?='\\d)|t|u|v(?='\\d)|w|x|zc|\\{|\\})");
+        rule.format = troffFormat;
+        highlightingRules.append (rule);
+
+        /* other escapes */
+        troffFormat.setForeground (Violet);
+        rule.pattern.setPattern ("\\\\([^e'`\\-\\s0\\|\\^&\\!\\\\%\\(\\*abcdDfhHjklLnoprsStuvwxz\\{\\}]|\\((?!\\w{2})|\\\\(?!\\$\\d)|\\*(?!\\(\\w{2})|b(?!'\\w)|(f|j|k|n)(?!\\w)|(f|n)(?!\\(\\w{2})|(h|H)(?!'\\d)|(S|v)(?!'\\d)|z(?!c))");
+        rule.format = troffFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "LaTeX")
+    {
+        codeBlockFormat.setForeground (DarkMagenta);
+
+        /* commands */
+        QTextCharFormat laTexFormat;
+        laTexFormat.setForeground (Blue);
+        rule.pattern.setPattern ("\\\\([a-zA-Z]+|[^a-zA-Z\\(\\)\\[\\]])");
+        rule.format = laTexFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "pascal")
+    {
+        /* before parentheses */
+        QTextCharFormat pascalFormat;
+        pascalFormat.setFontItalic (true);
+        pascalFormat.setForeground (Blue);
+        rule.pattern.setPattern ("\\b(?<!(@|#|\\$))[A-Za-z0-9_]+(?=\\s*\\()");
+        rule.format = pascalFormat;
+        highlightingRules.append (rule);
+    }
+
+    /**********************
+     * Keywords and Types *
+     **********************/
+
+    /* keywords */
+    QTextCharFormat keywordFormat;
+    /* bash extra keywords */
+    if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
+    {
+        if (progLan == "cmake")
+        {
+            keywordFormat.setForeground (Brown);
+            rule.pattern.setPattern ("\\$\\{\\s*[A-Za-z0-9_.+/\\?#\\-:]*\\s*\\}");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+
+            /* projects (may be overridden by CMAKE keywords below it) */
+            keywordFormat.setForeground (Blue);
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)[A-Za-z0-9_]+(_BINARY_DIR|_SOURCE_DIR|_VERSION|_VERSION_MAJOR|_VERSION_MINOR|_VERSION_PATCH|_VERSION_TWEAK|_SOVERSION)(?!(\\.|-|@|#|\\$))\\b");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+
+            /*
+               previously, the first six patterns were started with:
+               ((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)
+               instead of: (?<=^|\\(|\\s)
+            */
+            keywordFormat.setForeground (DarkBlue);
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_ARGC|CMAKE_ARGV0|CMAKE_ARGS|CMAKE_AR|CMAKE_BINARY_DIR|CMAKE_BUILD_TOOL|CMAKE_CACHE_ARGS|CMAKE_CACHE_DEFAULT_ARGS|CMAKE_CACHEFILE_DIR|CMAKE_CACHE_MAJOR_VERSION|CMAKE_CACHE_MINOR_VERSION|CMAKE_CACHE_PATCH_VERSION|CMAKE_CFG_INTDIR|CMAKE_COMMAND|CMAKE_CROSSCOMPILING|CMAKE_CTEST_COMMAND|CMAKE_CURRENT_BINARY_DIR|CMAKE_CURRENT_LIST_DIR|CMAKE_CURRENT_LIST_FILE|CMAKE_CURRENT_LIST_LINE|CMAKE_CURRENT_SOURCE_DIR|CMAKE_DL_LIBS|CMAKE_EDIT_COMMAND|CMAKE_EXECUTABLE_SUFFIX|CMAKE_EXTRA_GENERATOR|CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES|CMAKE_GENERATOR|CMAKE_GENERATOR_INSTANCE|CMAKE_GENERATOR_PLATFORM|CMAKE_GENERATOR_TOOLSET|CMAKE_HOME_DIRECTORY|CMAKE_IMPORT_LIBRARY_PREFIX|CMAKE_IMPORT_LIBRARY_SUFFIX|CMAKE_JOB_POOL_COMPILE|CMAKE_JOB_POOL_LINK|CMAKE_LINK_LIBRARY_SUFFIX|CMAKE_MAJOR_VERSION|CMAKE_MAKE_PROGRAM|CMAKE_MINIMUM_REQUIRED_VERSION|CMAKE_MINOR_VERSION|CMAKE_PARENT_LIST_FILE|CMAKE_PATCH_VERSION|CMAKE_PROJECT_NAME|CMAKE_RANLIB|CMAKE_ROOT|CMAKE_SCRIPT_MODE_FILE|CMAKE_SHARED_LIBRARY_PREFIX|CMAKE_SHARED_LIBRARY_SUFFIX|CMAKE_SHARED_MODULE_PREFIX|CMAKE_SHARED_MODULE_SUFFIX|CMAKE_SIZEOF_VOID_P|CMAKE_SKIP_INSTALL_RULES|CMAKE_SKIP_RPATH|CMAKE_SOURCE_DIR|CMAKE_STANDARD_LIBRARIES|CMAKE_STATIC_LIBRARY_PREFIX|CMAKE_STATIC_LIBRARY_SUFFIX|CMAKE_TOOLCHAIN_FILE|CMAKE_TWEAK_VERSION|CMAKE_VERBOSE_MAKEFILE|CMAKE_VERSION|CMAKE_VS_DEVENV_COMMAND|CMAKE_VS_INTEL_Fortran_PROJECT_VERSION|CMAKE_VS_MSBUILD_COMMAND|CMAKE_VS_MSDEV_COMMAND|CMAKE_VS_PLATFORM_TOOLSETCMAKE_XCODE_PLATFORM_TOOLSET|PROJECT_BINARY_DIR|PROJECT_NAME|PROJECT_SOURCE_DIR|PROJECT_VERSION|PROJECT_VERSION_MAJOR|PROJECT_VERSION_MINOR|PROJECT_VERSION_PATCH|PROJECT_VERSION_TWEAK|BUILD_SHARED_LIBS|CMAKE_ABSOLUTE_DESTINATION_FILES|CMAKE_APPBUNDLE_PATH|CMAKE_AUTOMOC_RELAXED_MODE|CMAKE_BACKWARDS_COMPATIBILITY|CMAKE_BUILD_TYPE|CMAKE_COLOR_MAKEFILE|CMAKE_CONFIGURATION_TYPES|CMAKE_DEBUG_TARGET_PROPERTIES|CMAKE_ERROR_DEPRECATED|CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|CMAKE_SYSROOT|CMAKE_FIND_LIBRARY_PREFIXES|CMAKE_FIND_LIBRARY_SUFFIXES|CMAKE_FIND_NO_INSTALL_PREFIX|CMAKE_FIND_PACKAGE_WARN_NO_MODULE|CMAKE_FIND_ROOT_PATH|CMAKE_FIND_ROOT_PATH_MODE_INCLUDE|CMAKE_FIND_ROOT_PATH_MODE_LIBRARY|CMAKE_FIND_ROOT_PATH_MODE_PACKAGE|CMAKE_FIND_ROOT_PATH_MODE_PROGRAM|CMAKE_FRAMEWORK_PATH|CMAKE_IGNORE_PATH|CMAKE_INCLUDE_PATH|CMAKE_INCLUDE_DIRECTORIES_BEFORE|CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE|CMAKE_INSTALL_DEFAULT_COMPONENT_NAME|CMAKE_INSTALL_PREFIX|CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT|CMAKE_LIBRARY_PATH|CMAKE_MFC_FLAG|CMAKE_MODULE_PATH|CMAKE_NOT_USING_CONFIG_FLAGS|CMAKE_PREFIX_PATH|CMAKE_PROGRAM_PATH|CMAKE_SKIP_INSTALL_ALL_DEPENDENCY|CMAKE_STAGING_PREFIX|CMAKE_SYSTEM_IGNORE_PATH|CMAKE_SYSTEM_INCLUDE_PATH|CMAKE_SYSTEM_LIBRARY_PATH|CMAKE_SYSTEM_PREFIX_PATH|CMAKE_SYSTEM_PROGRAM_PATH|CMAKE_USER_MAKE_RULES_OVERRIDE|CMAKE_WARN_DEPRECATED|CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION|BORLAND|CMAKE_CL_64|CMAKE_COMPILER_2005|CMAKE_HOST_APPLE|CMAKE_HOST_SYSTEM_NAME|CMAKE_HOST_SYSTEM_PROCESSOR|CMAKE_HOST_SYSTEM|CMAKE_HOST_SYSTEM_VERSION|CMAKE_HOST_UNIX|CMAKE_HOST_WIN32|CMAKE_LIBRARY_ARCHITECTURE_REGEX|CMAKE_LIBRARY_ARCHITECTURE|CMAKE_OBJECT_PATH_MAX|CMAKE_SYSTEM_NAME|CMAKE_SYSTEM_PROCESSOR|CMAKE_SYSTEM|CMAKE_SYSTEM_VERSION|ENV|MSVC10|MSVC11|MSVC12|MSVC60|MSVC70|MSVC71|MSVC80|MSVC90|MSVC_IDE|MSVC|MSVC_VERSION|XCODE_VERSION|CMAKE_ARCHIVE_OUTPUT_DIRECTORY|CMAKE_AUTOMOC_MOC_OPTIONS|CMAKE_AUTOMOC|CMAKE_AUTORCC|CMAKE_AUTORCC_OPTIONS|CMAKE_AUTOUIC|CMAKE_AUTOUIC_OPTIONS|CMAKE_BUILD_WITH_INSTALL_RPATH|CMAKE_DEBUG_POSTFIX|CMAKE_EXE_LINKER_FLAGS|CMAKE_Fortran_FORMAT|CMAKE_Fortran_MODULE_DIRECTORY|CMAKE_GNUtoMS|CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE|CMAKE_INCLUDE_CURRENT_DIR|CMAKE_INSTALL_NAME_DIR|CMAKE_INSTALL_RPATH|CMAKE_INSTALL_RPATH_USE_LINK_PATH|CMAKE_LIBRARY_OUTPUT_DIRECTORY|CMAKE_LIBRARY_PATH_FLAG|CMAKE_LINK_DEF_FILE_FLAG|CMAKE_LINK_DEPENDS_NO_SHARED|CMAKE_LINK_INTERFACE_LIBRARIES|CMAKE_LINK_LIBRARY_FILE_FLAG|CMAKE_LINK_LIBRARY_FLAG|CMAKE_MACOSX_BUNDLE|CMAKE_MACOSX_RPATH|CMAKE_MODULE_LINKER_FLAGS|CMAKE_NO_BUILTIN_CHRPATH|CMAKE_NO_SYSTEM_FROM_IMPORTED|CMAKE_OSX_ARCHITECTURES|CMAKE_OSX_DEPLOYMENT_TARGET|CMAKE_OSX_SYSROOT|CMAKE_PDB_OUTPUT_DIRECTORY|CMAKE_POSITION_INDEPENDENT_CODE|CMAKE_RUNTIME_OUTPUT_DIRECTORY|CMAKE_SHARED_LINKER_FLAGS|CMAKE_SKIP_BUILD_RPATH|CMAKE_SKIP_INSTALL_RPATH|CMAKE_STATIC_LINKER_FLAGS|CMAKE_TRY_COMPILE_CONFIGURATION|CMAKE_USE_RELATIVE_PATHS|CMAKE_VISIBILITY_INLINES_HIDDEN|CMAKE_WIN32_EXECUTABLE|EXECUTABLE_OUTPUT_PATH|LIBRARY_OUTPUT_PATH|CMAKE_Fortran_MODDIR_DEFAULT|CMAKE_Fortran_MODDIR_FLAG|CMAKE_Fortran_MODOUT_FLAG|CMAKE_INTERNAL_PLATFORM_ABI)(?!(\\.|-|@|#|\\$))\\b");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_DISABLE_FIND_PACKAGE_|CMAKE_EXE_LINKER_FLAGS_|CMAKE_MAP_IMPORTED_CONFIG_|CMAKE_MODULE_LINKER_FLAGS_|CMAKE_PDB_OUTPUT_DIRECTORY_|CMAKE_SHARED_LINKER_FLAGS_|CMAKE_STATIC_LINKER_FLAGS_|CMAKE_COMPILER_IS_GNU)[A-Za-z0-9_]+(?!(\\.|-|@|#|\\$))\\b");
+            highlightingRules.append (rule);
+
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_)[A-Za-z0-9_]+(_POSTFIX|_VISIBILITY_PRESET|_ARCHIVE_APPEND|_ARCHIVE_CREATE|_ARCHIVE_FINISH|_COMPILE_OBJECT|_COMPILER_ABI|_COMPILER_ID|_COMPILER_LOADED|_COMPILER|_COMPILER_EXTERNAL_TOOLCHAIN|_COMPILER_TARGET|_COMPILER_VERSION|_CREATE_SHARED_LIBRARY|_CREATE_SHARED_MODULE|_CREATE_STATIC_LIBRARY|_FLAGS_DEBUG|_FLAGS_MINSIZEREL|_FLAGS_RELEASE|_FLAGS_RELWITHDEBINFO|_FLAGS|_IGNORE_EXTENSIONS|_IMPLICIT_INCLUDE_DIRECTORIES|_IMPLICIT_LINK_DIRECTORIES|_IMPLICIT_LINK_FRAMEWOR)(?!(\\.|-|@|#|\\$))\\b");
+            highlightingRules.append (rule);
+
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_PROJECT_)[A-Za-z0-9_]+(_INCLUDE)(?!(\\.|-|@|#|\\$))\\b");
+            highlightingRules.append (rule);
+
+            /* platforms */
+            keywordFormat.setFontItalic (true);
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(APPLE|CRLF|CYGWIN|DOS|HAIKU|LF|MINGW|MSYS|UNIX|WIN32)(?=$|\\)|\\s)");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+            keywordFormat.setFontItalic (false);
+
+            keywordFormat.setForeground (DarkMagenta);
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(AND|OR|NOT)(?=$|\\s)");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(ABSOLUTE|AFTER|ALIAS|ALIASED_TARGET|ALL|ALWAYS|APPEND|ARG_VAR|ARGS|ARCHIVE|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTHOR_WARNING|BEFORE|BINARY_DIR|BOOL|BRIEF_DOCS|BUNDLE|BYPRODUCTS|CACHE|CACHED_VARIABLE|CLEAR|CMAKE_FIND_ROOT_PATH_BOTH|COMP|COMMAND|COMMENT|COMPONENT|COMPONENTS|CONFIG|CONFIG_MODE|CONFIGS|CONFIGURE_COMMAND|CONFIGURATIONS|COPY|COPYONLY|COMPATIBILITY|COST|CREATE_LINK|DEFAULT_MSG|DEPENDS|DEPENDEES|DEPENDERS|DEPRECATION|DESCRIPTION|DESTINATION|DIRECTORY|DIRECTORY_PERMISSIONS|DISABLED|DISABLED_FEATURES|DOC|DOWNLOAD|DOWNLOAD_COMMAND|DOWNLOAD_DIR|DOWNLOAD_NAME|DOWNLOAD_NO_EXTRACT|DOWNLOAD_NO_PROGRESS|ENABLED_FEATURES|ENCODING|ERROR_VARIABLE|ERROR_FILE|ERROR_QUIET|ERROR_STRIP_TRAILING_WHITESPACE|ESCAPE_QUOTES|EXACT|EXCLUDE|EXCLUDE_FROM_ALL|EXCLUDE_FROM_MAIN|EXPORT|EXPORT_LINK_INTERFACE_LIBRARIES|EXPORT_NAME|EXPORT_PROPERTIES|EXT|FAIL_MESSAGE|FALSE|FATAL_ERROR|FATAL_ON_MISSING_REQUIRED_PACKAGES|FILE_PERMISSIONS|FILENAME|FILEPATH|FILES|FILES_MATCHING|FIND|FILTER|FOLDER|FRAMEWORK|FORCE|FOUND_VAR|FULL_DOCS|GENERATE|GET|GLOB|GLOB_RECURSE|GLOBAL|GROUP_EXECUTE|GROUP_READ|GUARD|HANDLE_COMPONENTS|HINTS|IMMEDIATE|IMPLICIT_DEPENDS|IMPORTED|IN|INDEPENDENT_STEP_TARGETS|INCLUDE_QUIET_PACKAGES|INCLUDES|INPUT_FILE|INSERT|INSTALL|INSTALL_COMMAND|INSTALL_DIR|INSTALL_DESTINATION|INTERNAL|INTERFACE|JOIN|LABELS|LAST_EXT|LENGTH|LIBRARY|LIMIT|LINK_PRIVATE|LINK_PUBLIC|LOCK|LOG|LOG_DIR|MAIN_DEPENDENCY|MAKE_DIRECTORY|MEASUREMENT|MODULE|MODIFIED|NAMELINK_ONLY|NAMELINK_SKIP|NAMESPACE|NAME|NAME_WE|NAME_WLE|NAMES|NEWLINE_STYLE|NO_CHECK_REQUIRED_COMPONENTS_MACRO|NO_CMAKE_BUILDS_PATH|NO_CMAKE_ENVIRONMENT_PATH|NO_CMAKE_FIND_ROOT_PATH|NO_CMAKE_PACKAGE_REGISTRY|NO_CMAKE_PATH|NO_CMAKE_SYSTEM_PACKAGE_REGISTRY|NO_CMAKE_SYSTEM_PATH|NO_DEPENDS|NO_DEFAULT_PATH|NO_MODULE|NO_POLICY_SCOPE|NO_SET_AND_CHECK_MACRO|NO_SOURCE_PERMISSIONS|NO_SYSTEM_ENVIRONMENT_PATH|OBJECT|OFF|OFFSET|ON|ONLY_CMAKE_FIND_ROOT_PATH|OPTIONAL|OPTIONAL_PACKAGES_FOUND|OPTIONAL_PACKAGES_NOT_FOUND|OUTPUT_FILE|OUTPUT_QUIET|OUTPUT_STRIP_TRAILING_WHITESPACE|OUTPUT_VARIABLE|OWNER_EXECUTE|OWNER_READ|OWNER_WRITE|PATH|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PACKAGE_VERSION_FILE|PARENT_SCOPE|PATHS|PATH_SUFFIXES|PATCH_COMMAND|PATH_VARS|PATTERN|PERMISSIONS|PKG_CONFIG_FOUND|PKG_CONFIG_EXECUTABLE|PKG_CONFIG_VERSION_STRING|PRE_BUILD|PRE_LINK|PREFIX|POST_BUILD|PRIVATE|PRIVATE_HEADER|PROGRAM|PROGRAM_ARGS|PROGRAMS|PROPERTY|PROPERTIES|PUBLIC|PUBLIC_HEADER|PURPOSE|QUIET|RANGE|READ|READ_SYMLINK|REALPATH|RECOMMENDED|RECOMMENDED_PACKAGES_FOUND|RECOMMENDED_PACKAGES_NOT_FOUND|REGEX|RELATIVE_PATH|RENAME|REMOVE|REMOVE_AT|REMOVE_DUPLICATES|REMOVE_RECURSE|REMOVE_ITEM|REQUIRED|REQUIRED_PACKAGES_FOUND|REQUIRED_PACKAGES_NOT_FOUND|REQUIRED_VARS|RESOURCE|REVERSE|RESULT_VARIABLE|RESULTS_VARIABLE|RUNTIME|RUNTIME_PACKAGES_FOUND|RUNTIME_PACKAGES_NOT_FOUND|RETURN_VALUE|SEND_ERROR|SHARED|SIZE|SORT|SOURCE|SOURCE_DIR|SOURCE_SUBDIR|SOURCES|SOVERSION|STAMP_DIR|STATIC|STATUS|STEP_TARGETS|STRING|STRINGS|SUBLIST|SUFFIX|SYSTEM|TARGETS|TEST|TIMEOUT|TIMESTAMP|TMP_DIR|TO_CMAKE_PATH|TO_NATIVE_PATH|TOUCH|TOUCH_NOCREATE|TRANSFORM|TRUE|TYPE|UNKNOWN|UPDATE_COMMAND|UPDATE_DISCONNECTED|UPLOAD|URL|URL_HASH|USES_TERMINAL|VAR|VARIABLE|VARIABLE_PREFIX|VERBATIM|VERSION|VERSION_HEADER|VERSION_VAR|WARNING|WHAT|WILL_FAIL|WORKING_DIRECTORY|WRITE)(?=$|\\)|\\s)");
+            highlightingRules.append (rule);
+
+            keywordFormat.setFontWeight (QFont::Bold);
+            keywordFormat.setFontItalic (true);
+            rule.pattern.setPattern ("(?<=^|\\(|\\s)(@ONLY|DEFINED|EQUAL|EXISTS|GREATER|IS_ABSOLUTE|IS_NEWER_THAN|IS_SYMLINK|LESS|MATCHES|STREQUAL|STRGREATER|STRLESS|VERSION_GREATER|VERSION_EQUAL|VERSION_LESS|AnyNewerVersion|ExactVersion|SameMajorVersion)(?=$|\\)|\\s)");
+            rule.format = keywordFormat;
+            highlightingRules.append (rule);
+            keywordFormat.setFontItalic (false);
+        }
+        keywordFormat.setFontWeight (QFont::Bold);
+        keywordFormat.setForeground (Magenta);
+        rule.pattern.setPattern ("((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)\\K(?<!\\${)(sudo\\s+)?((kill|killall|torify|proxychains)\\s+)?(adduser|addgroup|apropos|apt|apt-get|aspell|awk|basename|bash|bc|bsdtar|bunzip2|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmake|cmp|comm|cp|cron|crontab|csplit|curl|cut|cvs|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|dpkg|du|egrep|eject|emacs|env|ethtool|expect|expand|expr|fdformat|fdisk|featherpad|fgrep|file|find|finger|fmt|fold|format|fpad|free|fsck|ftp|function|fuser|gawk|gcc|gio|git|gpg|grep|groups|gunzip|gzip|head|hostname|id|ifconfig|ifdown|ifup|import|install|java|javac|jobs|join|kdialog|kill|killall|less|links|ln|locate|logname|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|mail|make|makepkg|man|mkdir|mkfifo|mkisofs|mknod|mktemp|more|mount|mtools|mv|mmv|nano|netstat|nice|nl|nohup|nslookup|open|op|pacman|passwd|paste|pathchk|perl|pico|pine|ping|pkill|popd|pr|printcap|printenv|proxychains|ps|pwd|python|qarma|qmake((-qt)?[3-9])*|quota|quotacheck|quotactl|ram|rcp|readarray|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|ruby|screen|scp|sdiff|sed|sftp|shutdown|sleep|slocate|sort|split|ssh|strace|strip|su|sudo|sum|svn|symlink|sync|tail|tar|tee|time|touch|top|torify|traceroute|tr|tsort|tty|type|ulimit|umask|umount|uname|unexpand|uniq|units|unshar|unzip|useradd|usermod|users|usleep|uuencode|uudecode|vdir|vi|vim|vmstat|wall|watch|wc|whereis|which|who|whoami|wget|write|xargs|xeyes|yad|yes|zenity|zip|zypper|7z)(?!(\\.|-|@|#|\\$))\\b");
+        rule.format = keywordFormat;
+        highlightingRules.append (rule);
+    }
+    else
+        keywordFormat.setFontWeight (QFont::Bold);
+    keywordFormat.setForeground (DarkBlue);
+
+    /* types */
+    QTextCharFormat typeFormat;
+    typeFormat.setForeground (DarkMagenta); //(QColor (102, 0, 0));
+
+    const QStringList keywordPatterns = keywords (Lang);
+    for (const QString &pattern : keywordPatterns)
+    {
+        rule.pattern.setPattern (pattern);
+        rule.format = keywordFormat;
+        highlightingRules.append (rule);
+    }
+
+    if (progLan == "qmake")
+    {
+        QTextCharFormat qmakeFormat;
+        /* qmake test functions */
+        qmakeFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("\\b(cache|CONFIG|contains|count|debug|defined|equals|error|eval|exists|export|files|for|greaterThan|if|include|infile|isActiveConfig|isEmpty|isEqual|lessThan|load|log|message|mkpath|packagesExist|prepareRecursiveTarget|qtCompileTest|qtHaveModule|requires|system|touch|unset|warning|write_file)(?=\\s*\\()");
+        rule.format = qmakeFormat;
+        highlightingRules.append (rule);
+        /* qmake paths */
+        qmakeFormat.setForeground (Blue);
+        rule.pattern.setPattern ("\\${1,2}([A-Za-z0-9_]+|\\[[A-Za-z0-9_]+\\]|\\([A-Za-z0-9_]+\\))");
+        rule.format = qmakeFormat;
+        highlightingRules.append (rule);
+    }
+
+    const QStringList typePatterns = types();
+    for (const QString &pattern : typePatterns)
+    {
+        rule.pattern.setPattern (pattern);
+        rule.format = typeFormat;
+        highlightingRules.append (rule);
+    }
+
+    /***********
+     * Details *
+     ***********/
+
+    /* these are used for all comments */
+    commentFormat.setForeground (Red);
+    commentFormat.setFontItalic (true);
+    /* WARNING: This is used by Fountain's synopses too. */
+    noteFormat.setFontWeight (QFont::Bold);
+    noteFormat.setFontItalic (true);
+    noteFormat.setForeground (DarkRed);
+
+    /* these can also be used inside multiline comments */
+    urlFormat.setFontUnderline (true);
+    urlFormat.setForeground (Blue);
+    urlFormat.setFontItalic (true);
+
+    if (progLan == "c" || progLan == "cpp")
+    {
+        QTextCharFormat cFormat;
+
+        /* Qt and Gtk+ specific classes */
+        cFormat.setFontWeight (QFont::Bold);
+        cFormat.setForeground (DarkMagenta);
+        if (progLan == "cpp")
+            rule.pattern.setPattern ("\\bQ[A-Z][A-Za-z0-9]+(?!(\\.|-|@|#|\\$))\\b");
+        else
+            rule.pattern.setPattern ("\\bG[A-Za-z]+(?!(\\.|-|@|#|\\$))\\b");
+        rule.format = cFormat;
+        highlightingRules.append (rule);
+
+        /* Qt's global functions, enums and global colors */
+        if (progLan == "cpp")
+        {
+            cFormat.setFontItalic (true);
+            rule.pattern.setPattern ("\\bq(App)(?!(\\@|#|\\$))\\b|\\bq(Abs|Bound|Critical|Debug|Fatal|FuzzyCompare|InstallMsgHandler|MacVersion|Max|Min|Round64|Round|Version|Warning|getenv|putenv|rand|srand|tTrId|unsetenv|_check_ptr|t_set_sequence_auto_mnemonic|t_symbian_exception2Error|t_symbian_exception2LeaveL|t_symbian_throwIfError)(?!(\\.|-|@|#|\\$))\\b");
+            rule.format = cFormat;
+            highlightingRules.append (rule);
+
+            cFormat.setFontWeight (QFont::Normal);
+            rule.pattern.setPattern ("\\bQt\\s*::\\s*[A-Z][A-Za-z0-9_]+(?!(\\.|-|@|#|\\$))\\b");
+            rule.format = cFormat;
+            highlightingRules.append (rule);
+            cFormat.setFontWeight (QFont::Bold);
+            cFormat.setFontItalic (false);
+
+            cFormat.setForeground (Magenta);
+            rule.pattern.setPattern ("\\bQt\\s*::\\s*(white|black|red|darkRed|green|darkGreen|blue|darkBlue|cyan|darkCyan|magenta|darkMagenta|yellow|darkYellow|gray|darkGray|lightGray|transparent|color0|color1)(?!(\\.|-|@|#|\\$))\\b");
+            rule.format = cFormat;
+            highlightingRules.append (rule);
+        }
+
+        /* preprocess */
+        cFormat.setForeground (Blue);
+        rule.pattern.setPattern ("^\\s*#\\s*include\\s|^\\s*#\\s*ifdef\\s|^\\s*#\\s*elif\\s|^\\s*#\\s*ifndef\\s|^\\s*#\\s*endif\\b|^\\s*#\\s*define\\s|^\\s*#\\s*undef\\s|^\\s*#\\s*error\\s|^\\s*#\\s*if\\s|^\\s*#\\s*else(?!(\\.|-|@|#|\\$))\\b");
+        rule.format = cFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "python")
+    {
+        QTextCharFormat pFormat;
+        pFormat.setFontWeight (QFont::Bold);
+        pFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("\\bself(?!(@|\\$))\\b");
+        rule.format = pFormat;
+        highlightingRules.append (rule);
+    }
+    else if (Lang == "javascript" || progLan == "qml")
+    {
+        QTextCharFormat ft;
+
+        /* after dot (may override keywords) */
+        ft.setForeground (Blue);
+        ft.setFontItalic (true);
+        rule.pattern.setPattern ("(?<=\\.)\\s*[A-Za-z0-9_\\$]*[A-Za-z][A-Za-z0-9_\\$]*(?=\\s*\\()"); // before parentheses
+        rule.format = ft;
+        highlightingRules.append (rule);
+        ft.setFontItalic (false);
+        rule.pattern.setPattern ("(?<=\\.)\\s*[A-Za-z0-9_\\$]*[A-Za-z][A-Za-z0-9_\\$]*(?!\\s*\\()(?![A-Za-z0-9_\\$])"); // not before parentheses
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        /* numbers */
+        ft.setForeground (Brown);
+        rule.pattern.setPattern ("(?<=^|[^\\w\\d@#\\$\\.])("
+                                 "\\d*\\.\\d+|\\d+\\.|(\\d*\\.?\\d+|\\d+\\.)(e|E)(\\+|-)?\\d+"
+                                 "|"
+                                 "([1-9]\\d*|0(o|O)[0-7]+|0[xX][0-9a-fA-F]+|0[bB][01]+)n?"
+                                 "|"
+                                 "0[0-7]*"
+                                 ")(?=[^\\w\\d\\.]|$)");
+        rule.format = ft;
+        highlightingRules.append (rule);
+
+        if (progLan == "qml")
+        {
+            ft.setFontWeight (QFont::Bold);
+            ft.setForeground (DarkMagenta);
+            rule.pattern.setPattern ("\\b(?<!(@|#|\\$))(Qt([A-Za-z]+)?|Accessible|AnchorAnimation|AnchorChanges|AnimatedImage|AnimatedSprite|Animation|AnimationController|Animator|Behavior|BorderImage|Canvas|CanvasGradient|CanvasImageData|CanvasPixelArray|ColorAnimation|Column|Context2D|DoubleValidator|Drag|DragEvent|DropArea|EnterKey|Flickable|Flipable|Flow|FocusScope|FontLoader|FontMetrics|Gradient|GradientStop|Grid|GridMesh|GridView|Image|IntValidator|Item|ItemGrabResult|KeyEvent|KeyNavigation|Keys|LayoutMirroring|ListView|Loader|Matrix4x4|MouseArea|MouseEvent|MultiPointTouchArea|NumberAnimation|OpacityAnimator|OpenGLInfo|ParallelAnimation|ParentAnimation|ParentChange|Path|PathAnimation|PathArc|PathAttribute|PathCubic|PathCurve|PathElement|PathInterpolator|PathLine|PathPercent|PathQuad|PathSvg|PathView|PauseAnimation|PinchArea|PinchEvent|Positioner|PropertyAction|PropertyAnimation|PropertyChanges|Rectangle|RegExpValidator|Repeater|Rotation|RotationAnimation|RotationAnimator|Row|Scale|ScaleAnimator|ScriptAction|SequentialAnimation|ShaderEffect|ShaderEffectSource|Shortcut|SmoothedAnimation|SpringAnimation|Sprite|SpriteSequence|State|StateChangeScript|StateGroup|SystemPalette|Text|TextEdit|TextInput|TextMetrics|TouchPoint|Transform|Transition|Translate|UniformAnimator|Vector3dAnimation|ViewTransition|WheelEvent|XAnimator|YAnimator|CloseEvent|ColorDialog|ColumnLayout|Dialog|FileDialog|FontDialog|GridLayout|Layout|MessageDialog|RowLayout|StackLayout|LocalStorage|Screen|SignalSpy|TestCase|Window|XmlListModel|XmlRole|Action|ApplicationWindow|BusyIndicator|Button|Calendar|CheckBox|ComboBox|ExclusiveGroup|GroupBox|Label|Menu|MenuBar|MenuItem|MenuSeparator|ProgressBar|RadioButton|ScrollView|Slider|SpinBox|SplitView|Stack|StackView|StackViewDelegate|StatusBar|Switch|Tab|TabView|TableView|TableViewColumn|TextArea|TextField|ToolBar|ToolButton|TreeView|Affector|Age|AngleDirection|Attractor|CumulativeDirection|CustomParticle|Direction|EllipseShape|Emitter|Friction|Gravity|GroupGoal|ImageParticle|ItemParticle|LineShape|MaskShape|Particle|ParticleGroup|ParticlePainter|ParticleSystem|PointDirection|RectangleShape|Shape|SpriteGoal|TargetDirection|TrailEmitter|Turbulence|Wander|Timer)(?!(\\-|@|#|\\$))\\b");
+            rule.format = ft;
+            highlightingRules.append (rule);
+        }
+    }
+    else if (progLan == "xml")
+    {
+        xmlLt.setPattern ("(<|<)");
+        xmlGt.setPattern ("(>|>)");
+
+        QTextCharFormat xmlElementFormat;
+        xmlElementFormat.setFontWeight (QFont::Bold);
+        xmlElementFormat.setForeground (Violet);
+        /* after </ or before /> */
+        rule.pattern.setPattern ("\\s*(<|<)/?[A-Za-z0-9_\\-:]+|\\s*(<|<)!(DOCTYPE|ENTITY|ELEMENT|ATTLIST|NOTATION)\\s|\\s*/?(>|>)");
+        rule.format = xmlElementFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat xmlAttributeFormat;
+        xmlAttributeFormat.setFontItalic (true);
+        xmlAttributeFormat.setForeground (Blue);
+        /* before = */
+        rule.pattern.setPattern ("\\s+[A-Za-z0-9_\\-:]+(?=\\s*\\=\\s*(\"|"|\'))");
+        rule.format = xmlAttributeFormat;
+        highlightingRules.append (rule);
+
+        /* <?xml ... ?> */
+        rule.pattern.setPattern ("^\\s*<\\?xml\\s+(?=.*\\?>)|\\s*\\?>");
+        rule.format = keywordFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "changelog")
+    {
+        /* before colon */
+        rule.pattern.setPattern ("^\\s+\\*\\s+[^:]+:");
+        rule.format = keywordFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat asteriskFormat;
+        asteriskFormat.setForeground (DarkMagenta);
+        /* the first asterisk */
+        rule.pattern.setPattern ("^\\s+\\*\\s+");
+        rule.format = asteriskFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern (urlPattern.pattern());
+        rule.format = urlFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "sh" || progLan == "makefile" || progLan == "cmake"
+             || progLan == "perl" || progLan == "ruby")
+    {
+        /* # is the sh comment sign when it doesn't follow a character */
+        if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
+        {
+            rule.pattern.setPattern ("(?<=^|\\s|;)#.*");
+
+            if (progLan == "sh")
+            {
+                /* Kate uses something like: "<<(?:\\s*)([\\\\]{0,1}[^\\s]+)"
+                "<<-" can be used instead of "<<" */
+                hereDocDelimiter.setPattern ("<<-?(?:\\s*)(\\\\{0,1}[A-Za-z0-9_]+)|<<-?(?:\\s*)(\'[A-Za-z0-9_]+\')|<<-?(?:\\s*)(\"[A-Za-z0-9_]+\")");
+            }
+        }
+        else if (progLan == "perl")
+        {
+            rule.pattern.setPattern ("(?<!\\$)#.*"); // $# isn't a comment
+
+            /* without space after "<<" and with ";" at the end */
+            //hereDocDelimiter.setPattern ("<<([A-Za-z0-9_]+)(?:;)|<<(\'[A-Za-z0-9_]+\')(?:;)|<<(\"[A-Za-z0-9_]+\")(?:;)");
+            /* can contain spaces inside quote marks or backquotes and usually has ";" at the end */
+            hereDocDelimiter.setPattern ("<<(?![0-9]+\\b)([A-Za-z0-9_]+)(?:;{0,1})|<<(?:\\s*)(\'[A-Za-z0-9_\\s]+\')(?:;{0,1})|<<(?:\\s*)(\"[A-Za-z0-9_\\s]+\")(?:;{0,1})|<<(?:\\s*)(`[A-Za-z0-9_\\s]+`)(?:;{0,1})");
+        }
+        else
+        {
+            rule.pattern.setPattern ("#.*");
+
+            if (progLan == "ruby")
+                hereDocDelimiter.setPattern ("<<(?:-|~){0,1}([A-Za-z0-9_]+)|<<(?:-|~){0,1}(\'[A-Za-z0-9_]+\')|<<(?:-|~){0,1}(\"[A-Za-z0-9_]+\")");
+        }
+        rule.format = commentFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat shFormat;
+
+        if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
+        {
+            /* make parentheses, braces and ; neutral as they were in keyword patterns */
+            rule.pattern.setPattern ("[\\(\\){};]");
+            rule.format = neutralFormat;
+            highlightingRules.append (rule);
+
+            shFormat.setForeground (Blue);
+            /* words before = */
+             if (progLan == "sh")
+                 rule.pattern.setPattern ("\\b[A-Za-z0-9_]+(?=\\=)");
+             else
+                 rule.pattern.setPattern ("\\b[A-Za-z0-9_]+\\s*(?=(\\+|\\?){0,1}\\=)");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+
+            /* but don't format a word before =
+               if it follows a dash */
+            rule.pattern.setPattern ("-+[^\\s\\\"\\\']+(?=\\=)");
+            rule.format = neutralFormat;
+            highlightingRules.append (rule);
+        }
+
+        if (progLan == "makefile" || progLan == "cmake")
+        {
+            shFormat.setForeground (DarkYellow);
+            /* automake/autoconf variables */
+            rule.pattern.setPattern ("@[A-Za-z0-9_-]+@|^[a-zA-Z0-9_-]+\\s*(?=:)");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+        }
+
+        if (progLan == "perl")
+        {
+            shFormat.setForeground (DarkYellow);
+            rule.pattern.setPattern ("[%@\\$]");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+
+            /* numbers (the underline separator is also included) */
+            shFormat.setForeground (Brown);
+            rule.pattern.setPattern ("(?<=^|[^\\w\\d\\.])("
+                                     "(\\d|\\d_\\d)*\\.(\\d|\\d_\\d)+|(\\d|\\d_\\d)+\\." // floating point
+                                     "|"
+                                     "((\\d|\\d_\\d)*\\.?(\\d|\\d_\\d)+|(\\d|\\d_\\d)+\\.)(e|E)(\\+|-)?(\\d|\\d_\\d)+" // scientific
+                                     "|"
+                                     "[1-9]_?(\\d|\\d_\\d)*" // digits
+                                     "|"
+                                     "0[xX]([0-9a-fA-F]|[0-9a-fA-F]_[0-9a-fA-F])+" // hexadecimal
+                                     "|"
+                                     "0([0-7]|[0-7]_[0-7])*" // octal
+                                     "|"
+                                     "0[bB]([01]|[01]_[01])+" // binary
+                                     ")(?=[^\\w\\d\\.]|$)");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+        }
+        else if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
+        {
+            shFormat.setForeground (DarkMagenta);
+            /* operators */
+            rule.pattern.setPattern ("[=\\+\\-*/%<>&`\\|~\\^\\!,]|\\s+-eq\\s+|\\s+-ne\\s+|\\s+-gt\\s+|\\s+-ge\\s+|\\s+-lt\\s+|\\s+-le\\s+|\\s+-z\\s+");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+
+            shFormat.setFontWeight (QFont::Bold);
+            /* brackets */
+            rule.pattern.setPattern ("\\s+\\[{1,2}\\s+|^\\[{1,2}\\s+|\\s+\\]{1,2}\\s+|\\s+\\]{1,2}$|\\s+\\]{1,2}\\s*(?=;)");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+        }
+        else if (progLan == "ruby")
+        {
+            /* numbers */
+            shFormat.setForeground (Brown);
+            rule.pattern.setPattern ("(?<![a-zA-Z0-9_@$%])\\d+(\\.\\d+)?(?=[^\\d]|$)");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+
+            /* built-in functions */
+            shFormat.setFontWeight (QFont::Bold);
+            shFormat.setForeground (Magenta);
+            rule.pattern.setPattern ("\\b(Array|Float|Integer|String|atan2|autoload|binding|callcc|caller|catch|chomp\\!?|cos|dump|eval|exec|exit\\!?|exp|fail|format|frexp|garbage_collect|gets|gsub\\!?|ldexp|load|log|log10|open|p|print|printf|putc|puts|raise|rand|readline|readlines|require|restore|scan|select|set_trace_func|sin|singleton_method_added|sleep|split|sprintf|sqrt|srand|sub\\!?|syscall|system|tan|test|throw|trace_var|trap|untrace_var)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "\\b(abort|at_exit|binding|chop\\!?|egid|euid|fork|getpgrp|getpriority|gid|global_variables|kill|lambda|local_variables|loop|pid|ppid|proc|setpgid|setpgrp|setpriority|setsid|uid|wait|wait2|waitpid|waitpid2)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(assoc|at|clear|collect\\!?|compact\\!?|concat|delete\\!?|delete_at|delete_if|each|each_index|fill|first|flatten\\!?|index|indexes|indices|join|last|length|nitems|pack|pop|push|rassoc|replace|reverse\\!?|reverse_each|rindex|shift|size\\??|slice\\!?|sort\\!?|to_a|to_ary|to_s|uniq\\!?|unshift)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(atime|blksize|backtrace|blocks|ceil|close|ctime|default|dev|each_key|each_pair|each_value|exception|fetch|floor|ftype|id2name|ino|invert|keys|message|mode|mtime|new|nlink|rdev|read|rehash|reject\\!?|rewind|round|seek|set_backtrace|store|superclass|tell|to_f|to_i|update|values)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(arity|binmode|call|clone|close_read|close_write|each_byte|each_line|eof\\??|fcntl|fileno|flush|getc|ioctl|isatty|lineno|offset|pos|post_match|pre_match|read|readchar|reopen|stat|string|sync|sysread|syswrite|to_io|to_proc|ungetc|write)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(ancestors|class_eval|class_variables|const_get|const_set|constants|included_modules|instance_methods|module_eval|name|private_class_method|private_instance_methods|protected_instance_methods|public_class_method|public_instance_methods)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(__id__|__send__|abs|coerce|display|divmod|dup|extend|freeze|hash|id|inspect|instance_eval|instance_variables|method|method_missing|methods|modulo|private_methods|protected_methods|public_methods|remainder|send|singleton_methods|taint|type|untaint)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(add|capitalize\\!?|center|count|crypt|downcase\\!?|hex|intern|kcode|list|ljust|match|members|next\\!?|oct|rjust|source|squeeze\\!?|strip\\!?|succ\\!?|sum|swapcase\\!?|to_str|tr\\!?|tr_s\\!?|unpack|upcase\\!?|upto)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(abort_on_exception|asctime|day|detect|each_with_index|entries|find|find_all|gmtime|grep|hour|isdst|localtime|map\\!?|max|mday|min|mon|month|priority|run|safe_level|sec|status|strftime|tv_sec|tv_usec|usec|utc|value\\??|wday|yday|year|wakeup|zone)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(begin|class|end)(?!(\\w|\\!|\\?))"
+                                     "|"
+                                     "(?<=\\.)(alive|block_given|blockdev|casefold|chardev|closed|const_defined|directory|empty|eql|equal|exclude_end|executable|executable_real|exist|exists|file|finite|frozen|gmt|grpowned|has_key|has_value|include|infinite|instance_of|integer|is_a|iterator|key|kind_of|member|method_defined|nan|nil|nonzero|owned|pipe|readable|readable_real|respond_to|setgid|setuid|socket|sticky|stop|symlink|tainted|tty|writable|writable_real|zero)\\?(?!(\\w|\\!|\\?))");
+            rule.format = shFormat;
+            highlightingRules.append (rule);
+        }
+    }
+    else if (progLan == "diff")
+    {
+        QTextCharFormat diffMinusFormat;
+        diffMinusFormat.setForeground (Red);
+        rule.pattern.setPattern ("^\\-.*");
+        rule.format = diffMinusFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat diffPlusFormat;
+        diffPlusFormat.setForeground (Blue);
+        rule.pattern.setPattern ("^\\+.*");
+        rule.format = diffPlusFormat;
+        highlightingRules.append (rule);
+
+        /*diffMinusFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^\\-{3}.*");
+        rule.format = diffMinusFormat;
+        highlightingRules.append (rule);
+
+        diffPlusFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^\\+{3}.*");
+        rule.format = diffPlusFormat;
+        highlightingRules.append (rule);*/
+
+        QTextCharFormat diffLinesFormat;
+        diffLinesFormat.setForeground (DarkBlue);
+        diffLinesFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^diff.*");
+        rule.format = diffLinesFormat;
+        highlightingRules.append (rule);
+
+        diffLinesFormat.setForeground (DarkGreenAlt);
+        rule.pattern.setPattern ("^@{2}[\\d,\\-\\+\\s]+@{2}");
+        rule.format = diffLinesFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "log")
+    {
+        /* example:
+         * May 19 02:01:44 debian sudo:
+         *   blue  green  magenta bold */
+        QTextCharFormat logFormat = neutralFormat;
+        logFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\s+[A-Za-z0-9_\\s]+(?=\\s*:)");
+        rule.format = logFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat logFormat1;
+        logFormat1.setForeground (Magenta);
+        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\s+[A-Za-z0-9_]+(?=\\s|$|:)");
+        rule.format = logFormat1;
+        highlightingRules.append (rule);
+
+        QTextCharFormat logDateFormat;
+        logDateFormat.setFontWeight (QFont::Bold);
+        logDateFormat.setForeground (Blue);
+        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(?=(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\b)");
+        rule.format = logDateFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat logTimeFormat;
+        logTimeFormat.setFontWeight (QFont::Bold);
+        logTimeFormat.setForeground (DarkGreenAlt);
+        rule.pattern.setPattern ("(?<=T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\b");
+        rule.format = logTimeFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat logInOutFormat;
+        logInOutFormat.setFontWeight (QFont::Bold);
+        logInOutFormat.setForeground (Brown);
+        rule.pattern.setPattern ("\\s+IN(?=\\s*\\=)|\\s+OUT(?=\\s*\\=)");
+        rule.format = logInOutFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat logRootFormat;
+        logRootFormat.setFontWeight (QFont::Bold);
+        logRootFormat.setForeground (Red);
+        rule.pattern.setPattern ("\\broot\\b");
+        rule.format = logRootFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "srt")
+    {
+        QTextCharFormat srtFormat;
+        srtFormat.setFontWeight (QFont::Bold);
+
+        /* <...> */
+        srtFormat.setForeground (Violet);
+        rule.pattern.setPattern ("</?[A-Za-z0-9_#\\s\"\\=]+>");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+
+        /* hh:mm:ss,ttt */
+        srtFormat = neutralFormat;
+        srtFormat.setFontItalic (true);
+        srtFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+
+        /* subtitle line */
+        srtFormat.setForeground (Red);
+        rule.pattern.setPattern ("^\\d+$");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+
+        /* hh */
+        srtFormat.setForeground (Blue);
+        rule.pattern.setPattern ("^\\s*\\d{2}(?=:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\K\\d{2}(?=:\\d{2}:\\d{2},\\d{3}\\s*$)");
+        highlightingRules.append (rule);
+
+        /* mm */
+        srtFormat.setForeground (DarkGreenAlt);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\K\\d{2}(?=:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\K\\d{2}(?=:\\d{2},\\d{3}\\s*$)");
+        highlightingRules.append (rule);
+
+        /* ss */
+        srtFormat.setForeground (Brown);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\K\\d{2}(?=,\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
+        rule.format = srtFormat;
+        highlightingRules.append (rule);
+        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\K\\d{2}(?=,\\d{3}\\s*$)");
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "desktop" || progLan == "config" || progLan == "theme")
+    {
+        QTextCharFormat desktopFormat = neutralFormat;
+        if (progLan == "config")
+        {
+            desktopFormat.setFontWeight (QFont::Bold);
+            desktopFormat.setFontItalic (true);
+            /* color values */
+            rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
+            rule.format = desktopFormat;
+            highlightingRules.append (rule);
+            desktopFormat.setFontItalic (false);
+            desktopFormat.setFontWeight (QFont::Normal);
+
+            /* URLs */
+            rule.pattern = urlPattern;
+            rule.format = urlFormat;
+            highlightingRules.append (rule);
+        }
+
+        desktopFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("^[^\\=\\[]+=|^[^\\=\\[]+\\[.*\\]=|;|/|%|\\+|-");
+        rule.format = desktopFormat;
+        highlightingRules.append (rule);
+
+        desktopFormat = neutralFormat;
+        desktopFormat.setFontWeight (QFont::Bold);
+        /* [...] */
+        rule.pattern.setPattern ("^\\[.*\\]$");
+        rule.format = desktopFormat;
+        highlightingRules.append (rule);
+
+        desktopFormat.setForeground (Blue);
+        /* [...] and before = (like ...[en]=)*/
+        rule.pattern.setPattern ("^[^\\=\\[]+\\[.*\\](?=\\s*\\=)");
+        rule.format = desktopFormat;
+        highlightingRules.append (rule);
+
+        desktopFormat.setForeground (DarkGreenAlt);
+        /* before = and [] */
+        rule.pattern.setPattern ("^[^\\=\\[]+(?=(\\[.*\\])*\\s*\\=)");
+        rule.format = desktopFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "yaml")
+    {
+        rule.pattern.setPattern ("(?<=^|\\s)#.*");
+        rule.format = commentFormat;
+        highlightingRules.append (rule);
+
+        QTextCharFormat yamlFormat;
+
+        /* keys (a key shouldn't start with a quote but can contain quotes) */
+        yamlFormat.setForeground (Blue);
+        rule.pattern.setPattern ("\\s*[^\\s\"\'#][^:,#]*:(\\s+|$)");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+
+        /* values */
+        // NOTE: This is the first time I use \K with Qt and it seems to work well.
+        yamlFormat.setForeground (Violet);
+        rule.pattern.setPattern ("[^:#]*:\\s+\\K[^#]+");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+
+        /* non-value numbers (including the scientific notation) */
+        yamlFormat.setForeground (Brown);
+        rule.pattern.setPattern ("^((\\s*-\\s)+)?\\s*\\K([-+]?(\\d*\\.?\\d+|\\d+\\.)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)\\s*(?=(#|$))");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+
+        /* lists */
+        yamlFormat.setForeground (DarkBlue);
+        yamlFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^(\\s*-(\\s|$))+");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+
+        /* booleans */
+        yamlFormat.setForeground (DarkBlue);
+        yamlFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^((\\s*-\\s)+)?\\s*\\K(true|false|yes|no|TRUE|FALSE|YES|NO|True|False|Yes|No)\\s*(?=(#|$))");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+
+        /* the start of a literal block (-> yamlLiteralBlock()) */
+        codeBlockFormat.setForeground (DarkMagenta);
+        codeBlockFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^(?!#)(?:(?!\\s#).)*\\s+\\K(\\||>)-?\\s*(?=\\s#|$)");
+        rule.format = codeBlockFormat;
+        highlightingRules.append (rule);
+
+        yamlFormat.setForeground (Verda);
+        rule.pattern.setPattern ("^---.*");
+        rule.format = yamlFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "fountain")
+    {
+        QTextCharFormat fFormat;
+
+        /* sections */
+        fFormat.setForeground (DarkRed);
+        fFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^\\s*#.*");
+        rule.format = fFormat;
+        highlightingRules.append (rule);
+
+        /* centered */
+        rule.pattern.setPattern (">|<");
+        rule.format = fFormat;
+        highlightingRules.append (rule);
+
+        /* synopses */
+        fFormat.setFontItalic (true);
+        rule.pattern.setPattern ("^\\s*=.*");
+        rule.format = fFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "url")
+    {
+        rule.pattern.setPattern (urlPattern.pattern());
+        rule.format = urlFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "gtkrc")
+    {
+        QTextCharFormat gtkrcFormat;
+        gtkrcFormat.setFontWeight (QFont::Bold);
+        /* color value format (#xyz) */
+        /*gtkrcFormat.setForeground (DarkGreenAlt);
+        rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
+        rule.format = gtkrcFormat;
+        highlightingRules.append (rule);*/
+
+        gtkrcFormat.setForeground (Blue);
+        rule.pattern.setPattern ("(fg|bg|base|text)(\\[NORMAL\\]|\\[PRELIGHT\\]|\\[ACTIVE\\]|\\[SELECTED\\]|\\[INSENSITIVE\\])");
+        rule.format = gtkrcFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "markdown")
+    {
+        /* Inline code is almost like a single-line quote.
+           "`" will be distinguished from "```" at multiLineQuote(). */
+        quoteMark.setPattern ("`");
+
+        blockQuoteFormat.setForeground (DarkGreen);
+        codeBlockFormat.setForeground (DarkRed);
+        QTextCharFormat markdownFormat;
+
+        /* footnotes */
+        markdownFormat.setFontWeight (QFont::Bold);
+        markdownFormat.setForeground (DarkBlue);
+        markdownFormat.setFontItalic (true);
+        rule.pattern.setPattern ("\\[\\^[^\\]]+\\]");
+        rule.format = markdownFormat;
+        highlightingRules.append (rule);
+        markdownFormat.setFontItalic (false);
+
+        /* horizontal rules */
+        markdownFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("^ {0,3}(\\* {0,2}){3,}\\s*$"
+                                 "|"
+                                 "^ {0,3}(- {0,2}){3,}\\s*$"
+                                 "|"
+                                 "^ {0,3}(\\= {0,2}){3,}\\s*$");
+        rule.format = markdownFormat;
+        highlightingRules.append (rule);
+
+        /*
+           links:
+           [link text] [link]
+           [link text] (http://example.com "Title")
+           [link text]: http://example.com
+           <http://example.com>
+        */
+        rule.pattern.setPattern ("\\[[^\\]\\^]*\\]\\s*\\[[^\\]\\s]*\\]"
+                                 "|"
+                                 "\\[[^\\]\\^]*\\]\\s*\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)"
+                                 "|"
+                                 "\\[[^\\]\\^]*\\]:\\s+\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*"
+                                 "|"
+                                 "<([A-Za-z0-9_]+://[A-Za-z0-9_.+/\\?\\=~&%#\\-:\\(\\)\\[\\]]+|[A-Za-z0-9_.\\-]+@[A-Za-z0-9_\\-]+\\.[A-Za-z0-9.]+)>");
+        rule.format = urlFormat;
+        highlightingRules.append (rule);
+
+        /*
+           images:
+           ![image](image.jpg "An image")
+           ![Image][1]
+           [1]: /path/to/image "alt text"
+        */
+        markdownFormat.setFontWeight (QFont::Normal);
+        markdownFormat.setForeground (Violet);
+        markdownFormat.setFontUnderline (true);
+        rule.pattern.setPattern ("\\!\\[[^\\]\\^]*\\]\\s*"
+                                 "(\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)|\\s*\\[[^\\]]*\\])");
+        rule.format = markdownFormat;
+        highlightingRules.append (rule);
+        markdownFormat.setFontUnderline (false);
+
+        /* headings */
+        markdownFormat.setFontWeight (QFont::Bold);
+        markdownFormat.setForeground (Verda);
+        rule.pattern.setPattern ("^#+\\s+.*");
+        rule.format = markdownFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "reST")
+    {
+        /* For bold, italic, verbatim and link
+
+           possible characters before the start:  ([{<:'"/
+           possible characters after the end:     )]}>.,;:-'"/\
+        */
+
+        codeBlockFormat.setForeground (DarkRed);
+        QTextCharFormat reSTFormat;
+
+        /* headings */
+        reSTFormat.setFontWeight (QFont::Bold);
+        reSTFormat.setForeground (Blue);
+        rule.pattern.setPattern ("^([^\\s\\w:])\\1{2,}$");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* lists */
+        reSTFormat.setFontWeight (QFont::Bold);
+        reSTFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("^\\s*(\\*|-|\\+|#\\.|[0-9]+\\.|[0-9]+\\)|\\([0-9]+\\)|[a-zA-Z]\\.|[a-zA-Z]\\)|\\([a-zA-Z]\\))\\s+");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+
+        /* verbatim */
+        quoteFormat.setForeground (Blue);
+        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)``"
+                                 "([^`\\s]((?!``).)*[^`\\s]"
+                                 "|"
+                                 "[^`\\s])"
+                                 "``(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
+        rule.format = quoteFormat;
+        highlightingRules.append (rule);
+
+        /* links */
+        reSTFormat = urlFormat;
+        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)"
+                                 "(`(\\S+|\\S((?!`_ ).)*\\S)`|\\w+|\\[\\w+\\])"
+                                 "_(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        reSTFormat = neutralFormat;
+
+        /* bold */
+        reSTFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)\\*\\*"
+                                 "([^*\\s]|[^*\\s][^*]*[^*\\s])"
+                                 "\\*\\*(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+        reSTFormat.setFontWeight (QFont::Normal);
+
+        /* italic */
+        reSTFormat.setFontItalic (true);
+        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)\\*"
+                                 "([^*\\s]|[^*\\s]+[^*]*[^*\\s])"
+                                 "\\*(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+        reSTFormat.setFontItalic (false);
+
+        /* labels and substitutions (".. _X:" and ".. |X| Y::") */
+        reSTFormat.setForeground (Violet);
+        rule.pattern.setPattern ("^\\s*\\.{2} _[\\w\\s\\-+]*:(?!\\S)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+        rule.pattern.setPattern ("^\\s*\\.{2} \\|[\\w\\s]+\\|\\s+\\w+::(?!\\S)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* aliases ("|X|") */
+        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)"
+                                 "\\|(?!\\s)[^|]+\\|"
+                                 "(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* footnotes (".. [#X]") */
+        rule.pattern.setPattern ("^\\s*\\.{2} (\\[(\\w|\\s|-|\\+|\\*)+\\]|\\[#(\\w|\\s|-|\\+)*\\])\\s+");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* references */
+        reSTFormat.setForeground (Brown);
+        rule.pattern.setPattern (":[\\w\\-+]+:`[^`]*`");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* ".. X::" (like literalinclude) */
+        reSTFormat.setFontWeight (QFont::Bold);
+        reSTFormat.setForeground (DarkGreen);
+        //rule.pattern.setPattern ("^\\s*\\.{2} literalinclude::(?!\\S)");
+        rule.pattern.setPattern ("^\\s*\\.{2} ((\\w|-)+::(?!\\S)|code-block::)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+
+        /* ":X:" */
+        reSTFormat.setFontWeight (QFont::Normal);
+        reSTFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("^\\s*:[^:]+:(?!\\S)");
+        rule.format = reSTFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "lua")
+    {
+        QTextCharFormat luaFormat;
+        luaFormat.setFontWeight (QFont::Bold);
+        luaFormat.setFontItalic (true);
+        luaFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("\\bos(?=\\.)");
+        rule.format = luaFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "m3u")
+    {
+        QTextCharFormat plFormat = neutralFormat;
+        plFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^#EXTM3U\\b");
+        rule.format = plFormat;
+        highlightingRules.append (rule);
+
+        /* after "," */
+        plFormat.setFontWeight (QFont::Normal);
+        plFormat.setForeground (DarkRed);
+        rule.pattern.setPattern ("^#EXTINF\\s*:[^,]*,\\K.*"); // "^#EXTINF\\s*:\\s*-*\\d+\\s*,.*|^#EXTINF\\s*:\\s*,.*"
+        rule.format = plFormat;
+        highlightingRules.append (rule);
+
+        /* before "," and after "EXTINF:" */
+        plFormat.setForeground (DarkYellow);
+        rule.pattern.setPattern ("^#EXTINF\\s*:\\s*\\K-*\\d+\\b"); // "^#EXTINF\\s*:\\s*-*\\d+\\b"
+        rule.format = plFormat;
+        highlightingRules.append (rule);
+
+        /*plFormat = neutralFormat;
+        rule.pattern.setPattern ("^#EXTINF\\s*:");
+        rule.format = plFormat;
+        highlightingRules.append (rule);*/
+
+        plFormat.setForeground (DarkGreen);
+        plFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("^#EXTINF\\b");
+        rule.format = plFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "scss")
+    {
+        /* scss supports nested css blocks but, instead of making its highlighting complex,
+           we format it without considering that and so, without syntax error, but with keywords() */
+
+        QTextCharFormat scssFormat;
+
+        /* definitions (starting with @) */
+        scssFormat.setForeground (Brown);
+        rule.pattern.setPattern ("@[A-Za-z_-]+\\b");
+        rule.format = scssFormat;
+        highlightingRules.append (rule);
+
+        /* numbers */
+        scssFormat.setFontItalic (true);
+        rule.pattern.setPattern ("(-|\\+){0,1}\\b\\d*\\.{0,1}\\d+%*");
+        rule.format = scssFormat;
+        highlightingRules.append (rule);
+
+        /* colors */
+        scssFormat.setForeground (Verda);
+        scssFormat.setFontWeight (QFont::Bold);
+        rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
+        rule.format = scssFormat;
+        highlightingRules.append (rule);
+
+
+        /* before :...; */
+        scssFormat.setForeground (Blue);
+        scssFormat.setFontItalic (false);
+        /* exclude note patterns artificially */
+        rule.pattern.setPattern ("[A-Za-z0-9_\\-]+(?<!\\bNOTE|\\bTODO|\\bFIXME|\\bWARNING)(?=\\s*:.*;*)");
+        rule.format = scssFormat;
+        highlightingRules.append (rule);
+        scssFormat.setFontWeight (QFont::Normal);
+
+        /* variables ($...) */
+        scssFormat.setFontItalic (true);
+        rule.pattern.setPattern ("\\$[A-Za-z0-9_\\-]+");
+        rule.format = scssFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "dart")
+    {
+        QTextCharFormat dartFormat;
+
+        /* dart:core classes */
+        dartFormat.setFontWeight (QFont::Bold);
+        dartFormat.setForeground (DarkMagenta);
+        rule.pattern.setPattern ("\\b(BidirectionalIterator|BigInt|Comparable|DateTime|Deprecated|Duration|Expando|Function|Future|Invocation|Iterable|Iterator|List|Map|MapEntry|Match|Object|Pattern|RegExp|RegExpMatch|RuneIterator|Runes|Set|Sink|StackTrace|Stopwatch|Stream|String|StringBuffer|StringSink|Symbol|Type|Uri|UriData)\\b");
+        rule.format = dartFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "go")
+    {
+        singleQuoteMark.setPattern ("`");
+        mixedQuoteMark.setPattern ("\"|`");
+
+        QTextCharFormat goFormat;
+        goFormat.setFontWeight (QFont::Bold);
+        goFormat.setForeground (Magenta);
+        rule.pattern.setPattern ("\\b(append|cap|close|complex|copy|delete|imag|len|make|new|panic|print|println|real|recover)\\b");
+        rule.format = goFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "pascal")
+    {
+        quoteMark.setPattern ("'");
+
+        QTextCharFormat pascalFormat;
+
+        /* symbols */
+        pascalFormat.setForeground (DarkYellow);
+        rule.pattern.setPattern ("[=\\+\\-*/<>\\^@#,;:\\.]");
+        rule.format = pascalFormat;
+        highlightingRules.append (rule);
+
+        /* numbers (including the scientific notation, hexadecimal, octal and binary numbers) */
+        pascalFormat.setForeground (Brown);
+        rule.pattern.setPattern ("#?(?<=^|[^\\w\\d])((\\d*\\.?\\d+|\\d+\\.)((e|E)(\\+|-)?\\d+)?|\\$[0-9a-fA-F]+|&[0-7]+|%[0-1]+)(?=[^\\d]|$)");
+        rule.format = pascalFormat;
+        highlightingRules.append (rule);
+
+        /* built-in functions */
+        pascalFormat.setFontWeight (QFont::Bold);
+        pascalFormat.setForeground (Magenta);
+        rule.pattern.setPattern ("(?i)\\b(?<!(@|#|\\$))(abs|addr|arctan|card|chr|concat|copy|copyword|cos|cosh|countwords|createobject|dirsep|eof|eoln|exp|expo|fexpand|filematch|filepos|filesize|firstof|frac|getenv|getlasterror|hex|int|ioresult|isalpha|isalphanum|isdigit|islower|isnull|isprint|isspace|isupper|isxdigit|keypressed|lastof|length|ln|log|locase|lowercase|ltrim|max|min|odd|ord|paramcount|paramstr|pi|platform|pos|pred|ptr|random|readkey|reverse|round|seed|sin|sinh|sizeof|sqr|sqrt|stopserverviceevent|succ|supported|swap|system|tan|tanh|trim|trunc|unixplatform|upcase|uppercase|urldecode|version|wait|wherex|wherey)(?!(@|#|\\$))\\b");
+        rule.format = pascalFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "java")
+    {
+        commentBoldFormat.setForeground (Red);
+        commentBoldFormat.setFontItalic (true);
+        commentBoldFormat.setFontWeight (QFont::Bold);
+
+        codeBlockFormat.setForeground (Violet);
+
+        /* characters */
+        rule.pattern.setPattern ("\'([^\'\\\\]|\\\\[0-9abefnrtv\"\'\\\\]|\\\\u[0-9a-fA-F]{4})\'");
+        rule.format = altQuoteFormat;
+        highlightingRules.append (rule);
+
+        /* all classes */
+        QTextCharFormat javaFormat;
+        javaFormat.setForeground (DarkMagenta);
+        javaFormat.setFontWeight (QFont::Bold);
+
+        rule.pattern.setPattern ("\\b(AboutEvent|AboutHandler|AbsentInformationException|AbstractAction|AbstractAnnotationValueVisitor6|AbstractAnnotationValueVisitor7|AbstractAnnotationValueVisitor8|AbstractBorder|AbstractButton|AbstractCellEditor|AbstractChronology|AbstractCollection|AbstractColorChooserPanel|AbstractDocument|AbstractDocument.AttributeContext|AbstractDocument.Content|AbstractDocument.ElementEdit|AbstractElementVisitor6|AbstractElementVisitor7|AbstractElementVisitor8|AbstractExecutorService|AbstractInterruptibleChannel|AbstractLayoutCache|AbstractLayoutCache.NodeDimensions|AbstractList|AbstractListModel|AbstractMap|AbstractMap.SimpleEntry|AbstractMap.SimpleImmutableEntry|AbstractMarshallerImpl|AbstractMethodError|AbstractOwnableSynchronizer|AbstractPreferences|AbstractProcessor|AbstractQueue|AbstractQueuedLongSynchronizer|AbstractQueuedSynchronizer|AbstractRegionPainter|AbstractRegionPainter.PaintContext|AbstractRegionPainter.PaintContext.CacheMode|AbstractScriptEngine|AbstractSelectableChannel|AbstractSelectionKey|AbstractSelector|AbstractSequentialList|AbstractSet|AbstractSpinnerModel|AbstractTableModel|AbstractTypeVisitor6|AbstractTypeVisitor7|AbstractTypeVisitor8|AbstractUndoableEdit|AbstractUnmarshallerImpl|AbstractView|AbstractWriter|AcceptPendingException|AccessControlContext|AccessControlException|AccessController|AccessDeniedException|AccessException|Accessible|AccessibleAction|AccessibleAttributeSequence|AccessibleBundle|AccessibleComponent|AccessibleContext|AccessibleEditableText|AccessibleExtendedComponent|AccessibleExtendedTable|AccessibleExtendedText|AccessibleHyperlink|AccessibleHypertext|AccessibleIcon|AccessibleKeyBinding|AccessibleObject|AccessibleRelation|AccessibleRelationSet|AccessibleResourceBundle|AccessibleRole|AccessibleSelection|AccessibleState|AccessibleStateSet|AccessibleStreamable|AccessibleTable|AccessibleTableModelChange|AccessibleText|AccessibleTextSequence|AccessibleValue|AccessMode|AccountException|AccountExpiredException|AccountLockedException|AccountNotFoundException|Acl|AclEntry|AclEntry|AclEntry.Builder|AclEntryFlag|AclEntryPermission|AclEntryType|AclFileAttributeView|AclNotFoundException|Action|Action|ActionEvent|ActionListener|ActionMap|ActionMapUIResource|Activatable|ActivateFailedException|ActivationDataFlavor|ActivationDesc|ActivationException|ActivationGroup|ActivationGroup_Stub|ActivationGroupDesc|ActivationGroupDesc.CommandEnvironment|ActivationGroupID|ActivationID|ActivationInstantiator|ActivationMonitor|ActivationSystem|Activator|ACTIVE|ActiveEvent|ACTIVITY_COMPLETED|ACTIVITY_REQUIRED|ActivityCompletedException|ActivityRequiredException|AdapterActivator|AdapterActivatorOperations|AdapterAlreadyExists|AdapterAlreadyExistsHelper|AdapterInactive|AdapterInactiveHelper|AdapterManagerIdHelper|AdapterNameHelper|AdapterNonExistent|AdapterNonExistentHelper|AdapterStateHelper|AddressHelper|Addressing|AddressingFeature|AddressingFeature.Responses|Adjustable|AdjustmentEvent|AdjustmentListener|Adler32|AEADBadTagException|AffineTransform|AffineTransformOp|AlgorithmConstraints|AlgorithmMethod|AlgorithmParameterGenerator|AlgorithmParameterGeneratorSpi|AlgorithmParameters|AlgorithmParameterSpec|AlgorithmParametersSpi|AllPermission|AlphaComposite|AlreadyBound|AlreadyBoundException|AlreadyBoundException|AlreadyBoundHelper|AlreadyBoundHolder|AlreadyConnectedException|AncestorEvent|AncestorListener|AnnotatedArrayType|AnnotatedConstruct|AnnotatedElement|AnnotatedParameterizedType|AnnotatedType|AnnotatedTypeVariable|AnnotatedWildcardType|Annotation|Annotation|AnnotationFormatError|AnnotationMirror|AnnotationTypeMismatchException|AnnotationValue|AnnotationValueVisitor|Any|AnyHolder|AnySeqHelper|AnySeqHelper|AnySeqHolder|AppConfigurationEntry|AppConfigurationEntry.LoginModuleControlFlag|Appendable|Applet|AppletContext|AppletInitializer|AppletStub|ApplicationException|Arc2D|Arc2D.Double|Arc2D.Float|Area|AreaAveragingScaleFilter|ARG_IN|ARG_INOUT|ARG_OUT|ArithmeticException|Array|Array|ArrayBlockingQueue|ArrayDeque|ArrayIndexOutOfBoundsException|ArrayList|Arrays|ArrayStoreException|ArrayType|ArrayType|AssertionError|AsyncBoxView|AsyncHandler|AsynchronousByteChannel|AsynchronousChannel|AsynchronousChannelGroup|AsynchronousChannelProvider|AsynchronousCloseException|AsynchronousFileChannel|AsynchronousServerSocketChannel|AsynchronousSocketChannel|AtomicBoolean|AtomicInteger|AtomicIntegerArray|AtomicIntegerFieldUpdater|AtomicLong|AtomicLongArray|AtomicLongFieldUpdater|AtomicMarkableReference|AtomicMoveNotSupportedException|AtomicReference|AtomicReferenceArray|AtomicReferenceFieldUpdater|AtomicStampedReference|AttachmentMarshaller|AttachmentPart|AttachmentUnmarshaller|Attr|Attribute|Attribute|Attribute|Attribute|AttributeChangeNotification|AttributeChangeNotificationFilter|AttributedCharacterIterator|AttributedCharacterIterator.Attribute|AttributedString|AttributeException|AttributeInUseException|AttributeList|AttributeList|AttributeList|AttributeListImpl|AttributeModificationException|AttributeNotFoundException|Attributes|Attributes|Attributes|Attributes.Name|Attributes2|Attributes2Impl|AttributeSet|AttributeSet|AttributeSet.CharacterAttribute|AttributeSet.ColorAttribute|AttributeSet.FontAttribute|AttributeSet.ParagraphAttribute|AttributeSetUtilities|AttributesImpl|AttributeValueExp|AttributeView|AudioClip|AudioFileFormat|AudioFileFormat.Type|AudioFileReader|AudioFileWriter|AudioFormat|AudioFormat.Encoding|AudioInputStream|AudioPermission|AudioSystem|AuthenticationException|AuthenticationException|AuthenticationNotSupportedException|Authenticator|Authenticator.RequestorType|AuthorizeCallback|AuthPermission|AuthProvider|AutoCloseable|Autoscroll|AWTError|AWTEvent|AWTEventListener|AWTEventListenerProxy|AWTEventMulticaster|AWTException|AWTKeyStroke|AWTPermission)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(BackingStoreException|BAD_CONTEXT|BAD_INV_ORDER|BAD_OPERATION|BAD_PARAM|BAD_POLICY|BAD_POLICY_TYPE|BAD_POLICY_VALUE|BAD_QOS|BAD_TYPECODE|BadAttributeValueExpException|BadBinaryOpValueExpException|BadKind|BadLocationException|BadPaddingException|BadStringOperationException|BandCombineOp|BandedSampleModel|Base64|Base64.Decoder|Base64.Encoder|BaseRowSet|BaseStream|BasicArrowButton|BasicAttribute|BasicAttributes|BasicBorders|BasicBorders.ButtonBorder|BasicBorders.FieldBorder|BasicBorders.MarginBorder|BasicBorders.MenuBarBorder|BasicBorders.RadioButtonBorder|BasicBorders.RolloverButtonBorder|BasicBorders.SplitPaneBorder|BasicBorders.ToggleButtonBorder|BasicButtonListener|BasicButtonUI|BasicCheckBoxMenuItemUI|BasicCheckBoxUI|BasicColorChooserUI|BasicComboBoxEditor|BasicComboBoxEditor.UIResource|BasicComboBoxRenderer|BasicComboBoxRenderer.UIResource|BasicComboBoxUI|BasicComboPopup|BasicControl|BasicDesktopIconUI|BasicDesktopPaneUI|BasicDirectoryModel|BasicEditorPaneUI|BasicFileAttributes|BasicFileAttributeView|BasicFileChooserUI|BasicFormattedTextFieldUI|BasicGraphicsUtils|BasicHTML|BasicIconFactory|BasicInternalFrameTitlePane|BasicInternalFrameUI|BasicLabelUI|BasicListUI|BasicLookAndFeel|BasicMenuBarUI|BasicMenuItemUI|BasicMenuUI|BasicOptionPaneUI|BasicOptionPaneUI.ButtonAreaLayout|BasicPanelUI|BasicPasswordFieldUI|BasicPermission|BasicPopupMenuSeparatorUI|BasicPopupMenuUI|BasicProgressBarUI|BasicRadioButtonMenuItemUI|BasicRadioButtonUI|BasicRootPaneUI|BasicScrollBarUI|BasicScrollPaneUI|BasicSeparatorUI|BasicSliderUI|BasicSpinnerUI|BasicSplitPaneDivider|BasicSplitPaneUI|BasicStroke|BasicTabbedPaneUI|BasicTableHeaderUI|BasicTableUI|BasicTextAreaUI|BasicTextFieldUI|BasicTextPaneUI|BasicTextUI|BasicTextUI.BasicCaret|BasicTextUI.BasicHighlighter|BasicToggleButtonUI|BasicToolBarSeparatorUI|BasicToolBarUI|BasicToolTipUI|BasicTreeUI|BasicViewportUI|BatchUpdateException|BeanContext|BeanContextChild|BeanContextChildComponentProxy|BeanContextChildSupport|BeanContextContainerProxy|BeanContextEvent|BeanContextMembershipEvent|BeanContextMembershipListener|BeanContextProxy|BeanContextServiceAvailableEvent|BeanContextServiceProvider|BeanContextServiceProviderBeanInfo|BeanContextServiceRevokedEvent|BeanContextServiceRevokedListener|BeanContextServices|BeanContextServicesListener|BeanContextServicesSupport|BeanContextServicesSupport.BCSSServiceProvider|BeanContextSupport|BeanContextSupport.BCSIterator|BeanDescriptor|BeanInfo|Beans|BevelBorder|BiConsumer|Bidi|BiFunction|BigDecimal|BigInteger|BinaryOperator|BinaryRefAddr|Binder|BindException|Binding|Binding|Binding|BindingHelper|BindingHolder|BindingIterator|BindingIteratorHelper|BindingIteratorHolder|BindingIteratorOperations|BindingIteratorPOA|BindingListHelper|BindingListHolder|BindingProvider|Bindings|BindingType|BindingType|BindingTypeHelper|BindingTypeHolder|BiPredicate|BitSet|Blob|BlockingDeque|BlockingQueue|BlockView|BMPImageWriteParam|Book|Boolean|BooleanControl|BooleanControl.Type|BooleanHolder|BooleanSeqHelper|BooleanSeqHolder|BooleanSupplier|BootstrapMethodError|Border|BorderFactory|BorderLayout|BorderUIResource|BorderUIResource.BevelBorderUIResource|BorderUIResource.CompoundBorderUIResource|BorderUIResource.EmptyBorderUIResource|BorderUIResource.EtchedBorderUIResource|BorderUIResource.LineBorderUIResource|BorderUIResource.MatteBorderUIResource|BorderUIResource.TitledBorderUIResource|BoundedRangeModel|Bounds|Bounds|Box|Box.Filler|BoxedValueHelper|BoxLayout|BoxView|BreakIterator|BreakIteratorProvider|BrokenBarrierException|Buffer|BufferCapabilities|BufferCapabilities.FlipContents|BufferedImage|BufferedImageFilter|BufferedImageOp|BufferedInputStream|BufferedOutputStream|BufferedReader|BufferedWriter|BufferOverflowException|BufferPoolMXBean|BufferStrategy|BufferUnderflowException|Button|ButtonGroup|ButtonModel|ButtonUI|Byte|ByteArrayInputStream|ByteArrayOutputStream|ByteBuffer|ByteChannel|ByteHolder|ByteLookupTable|ByteOrder)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(C14NMethodParameterSpec|CachedRowSet|CacheRequest|CacheResponse|Calendar|Calendar.Builder|CalendarDataProvider|CalendarNameProvider|Callable|CallableStatement|Callback|CallbackHandler|CallSite|CancelablePrintJob|CancellationException|CancelledKeyException|CannotProceed|CannotProceedException|CannotProceedHelper|CannotProceedHolder|CannotRedoException|CannotUndoException|CanonicalizationMethod|Canvas|CardLayout|Caret|CaretEvent|CaretListener|CDATASection|CellEditor|CellEditorListener|CellRendererPane|Certificate|Certificate|Certificate|Certificate.CertificateRep|CertificateEncodingException|CertificateEncodingException|CertificateException|CertificateException|CertificateExpiredException|CertificateExpiredException|CertificateFactory|CertificateFactorySpi|CertificateNotYetValidException|CertificateNotYetValidException|CertificateParsingException|CertificateParsingException|CertificateRevokedException|CertPath|CertPath.CertPathRep|CertPathBuilder|CertPathBuilderException|CertPathBuilderResult|CertPathBuilderSpi|CertPathChecker|CertPathParameters|CertPathTrustManagerParameters|CertPathValidator|CertPathValidatorException|CertPathValidatorException.BasicReason|CertPathValidatorException.Reason|CertPathValidatorResult|CertPathValidatorSpi|CertSelector|CertStore|CertStoreException|CertStoreParameters|CertStoreSpi|ChangedCharSetException|ChangeEvent|ChangeListener|Channel|ChannelBinding|Channels|Character|Character.Subset|Character.UnicodeBlock|Character.UnicodeScript|CharacterCodingException|CharacterData|CharacterIterator|Characters|CharArrayReader|CharArrayWriter|CharBuffer|CharConversionException|CharHolder|CharSeqHelper|CharSeqHolder|CharSequence|Charset|CharsetDecoder|CharsetEncoder|CharsetProvider|Checkbox|CheckboxGroup|CheckboxMenuItem|CheckedInputStream|CheckedOutputStream|Checksum|Choice|ChoiceCallback|ChoiceFormat|Chromaticity|ChronoField|ChronoLocalDate|ChronoLocalDateTime|Chronology|ChronoPeriod|ChronoUnit|ChronoZonedDateTime|Cipher|CipherInputStream|CipherOutputStream|CipherSpi|Class|ClassCastException|ClassCircularityError|ClassDefinition|ClassDesc|ClassFileTransformer|ClassFormatError|ClassLoader|ClassLoaderRepository|ClassLoadingMXBean|ClassNotFoundException|ClassValue|ClientInfoStatus|ClientRequestInfo|ClientRequestInfoOperations|ClientRequestInterceptor|ClientRequestInterceptorOperations|Clip|Clipboard|ClipboardOwner|Clob|Clock|Cloneable|CloneNotSupportedException|Closeable|ClosedByInterruptException|ClosedChannelException|ClosedDirectoryStreamException|ClosedFileSystemException|ClosedSelectorException|ClosedWatchServiceException|CMMException|Codec|CodecFactory|CodecFactoryHelper|CodecFactoryOperations|CodecOperations|CoderMalfunctionError|CoderResult|CODESET_INCOMPATIBLE|CodeSets|CodeSigner|CodeSource|CodingErrorAction|CollapsedStringAdapter|CollationElementIterator|CollationKey|Collator|CollatorProvider|Collection|CollectionCertStoreParameters|Collections|Collector|Collector.Characteristics|Collectors|Color|ColorChooserComponentFactory|ColorChooserUI|ColorConvertOp|ColorModel|ColorSelectionModel|ColorSpace|ColorSupported|ColorType|ColorUIResource|ComboBoxEditor|ComboBoxModel|ComboBoxUI|ComboPopup|COMM_FAILURE|CommandInfo|CommandMap|CommandObject|Comment|Comment|CommonDataSource|CommunicationException|Comparable|Comparator|Compilable|CompilationMXBean|CompiledScript|Compiler|CompletableFuture|CompletableFuture.AsynchronousCompletionTask|Completion|CompletionException|CompletionHandler|Completions|CompletionService|CompletionStage|CompletionStatus|CompletionStatusHelper|Component|Component.BaselineResizeBehavior|ComponentAdapter|ComponentColorModel|ComponentEvent|ComponentIdHelper|ComponentInputMap|ComponentInputMapUIResource|ComponentListener|ComponentOrientation|ComponentSampleModel|ComponentUI|ComponentView|Composite|CompositeContext|CompositeData|CompositeDataInvocationHandler|CompositeDataSupport|CompositeDataView|CompositeName|CompositeType|CompositeView|CompoundBorder|CompoundControl|CompoundControl.Type|CompoundEdit|CompoundName|Compression|ConcurrentHashMap|ConcurrentHashMap.KeySetView|ConcurrentLinkedDeque|ConcurrentLinkedQueue|ConcurrentMap|ConcurrentModificationException|ConcurrentNavigableMap|ConcurrentSkipListMap|ConcurrentSkipListSet|Condition|Configuration|Configuration.Parameters|ConfigurationException|ConfigurationSpi|ConfirmationCallback|ConnectException|ConnectException|ConnectIOException|Connection|ConnectionEvent|ConnectionEventListener|ConnectionPendingException|ConnectionPoolDataSource|Console|ConsoleHandler|ConstantCallSite|Constructor|ConstructorProperties|Consumer|Container|ContainerAdapter|ContainerEvent|ContainerListener|ContainerOrderFocusTraversalPolicy|ContentHandler|ContentHandler|ContentHandlerFactory|ContentModel|Context|Context|ContextList|ContextNotEmptyException|ContextualRenderedImageFactory|Control|Control|Control.Type|ControlFactory|ControllerEventListener|ConvolveOp|CookieHandler|CookieHolder|CookieManager|CookiePolicy|CookieStore|Copies|CopiesSupported|CopyOnWriteArrayList|CopyOnWriteArraySet|CopyOption|CountDownLatch|CountedCompleter|CounterMonitor|CounterMonitorMBean|CRC32|CredentialException|CredentialExpiredException|CredentialNotFoundException|CRL|CRLException|CRLReason|CRLSelector|CropImageFilter|CryptoPrimitive|CSS|CSS.Attribute|CTX_RESTRICT_SCOPE|CubicCurve2D|CubicCurve2D.Double|CubicCurve2D.Float|Currency|CurrencyNameProvider|Current|Current|Current|CurrentHelper|CurrentHelper|CurrentHelper|CurrentHolder|CurrentOperations|CurrentOperations|CurrentOperations|Cursor|Customizer|CustomMarshal|CustomValue|CyclicBarrier)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(Data|DATA_CONVERSION|DatabaseMetaData|DataBindingException|DataBuffer|DataBufferByte|DataBufferDouble|DataBufferFloat|DataBufferInt|DataBufferShort|DataBufferUShort|DataContentHandler|DataContentHandlerFactory|DataFlavor|DataFormatException|DatagramChannel|DatagramPacket|DatagramSocket|DatagramSocketImpl|DatagramSocketImplFactory|DataHandler|DataInput|DataInputStream|DataInputStream|DataLine|DataLine.Info|DataOutput|DataOutputStream|DataOutputStream|DataSource|DataSource|DataTruncation|DatatypeConfigurationException|DatatypeConstants|DatatypeConstants.Field|DatatypeConverter|DatatypeConverterInterface|DatatypeFactory|Date|Date|DateFormat|DateFormat.Field|DateFormatProvider|DateFormatSymbols|DateFormatSymbolsProvider|DateFormatter|DateTimeAtCompleted|DateTimeAtCreation|DateTimeAtProcessing|DateTimeException|DateTimeFormatter|DateTimeFormatterBuilder|DateTimeParseException|DateTimeSyntax|DayOfWeek|DebugGraphics|DecimalFormat|DecimalFormatSymbols|DecimalFormatSymbolsProvider|DecimalStyle|DeclaredType|DeclHandler|DefaultBoundedRangeModel|DefaultButtonModel|DefaultCaret|DefaultCellEditor|DefaultColorSelectionModel|DefaultComboBoxModel|DefaultDesktopManager|DefaultEditorKit|DefaultEditorKit.BeepAction|DefaultEditorKit.CopyAction|DefaultEditorKit.CutAction|DefaultEditorKit.DefaultKeyTypedAction|DefaultEditorKit.InsertBreakAction|DefaultEditorKit.InsertContentAction|DefaultEditorKit.InsertTabAction|DefaultEditorKit.PasteAction|DefaultFocusManager|DefaultFocusTraversalPolicy|DefaultFormatter|DefaultFormatterFactory|DefaultHandler|DefaultHandler2|DefaultHighlighter|DefaultHighlighter.DefaultHighlightPainter|DefaultKeyboardFocusManager|DefaultListCellRenderer|DefaultListCellRenderer.UIResource|DefaultListModel|DefaultListSelectionModel|DefaultLoaderRepository|DefaultLoaderRepository|DefaultMenuLayout|DefaultMetalTheme|DefaultMutableTreeNode|DefaultPersistenceDelegate|DefaultRowSorter|DefaultRowSorter.ModelWrapper|DefaultSingleSelectionModel|DefaultStyledDocument|DefaultStyledDocument.AttributeUndoableEdit|DefaultStyledDocument.ElementSpec|DefaultTableCellRenderer|DefaultTableCellRenderer.UIResource|DefaultTableColumnModel|DefaultTableModel|DefaultTextUI|DefaultTreeCellEditor|DefaultTreeCellRenderer|DefaultTreeModel|DefaultTreeSelectionModel|DefaultValidationEventHandler|DefinitionKind|DefinitionKindHelper|Deflater|DeflaterInputStream|DeflaterOutputStream|Delayed|DelayQueue|Delegate|Delegate|Delegate|DelegationPermission|Deprecated|Deque|Descriptor|DescriptorAccess|DescriptorKey|DescriptorRead|DescriptorSupport|DESedeKeySpec|DesignMode|DESKeySpec|Desktop|Desktop.Action|DesktopIconUI|DesktopManager|DesktopPaneUI|Destination|Destroyable|DestroyFailedException|Detail|DetailEntry|DGC|DHGenParameterSpec|DHKey|DHParameterSpec|DHPrivateKey|DHPrivateKeySpec|DHPublicKey|DHPublicKeySpec|Diagnostic|Diagnostic.Kind|DiagnosticCollector|DiagnosticListener|Dialog|Dialog.ModalExclusionType|Dialog.ModalityType|DialogTypeSelection|Dictionary|DigestException|DigestInputStream|DigestMethod|DigestMethodParameterSpec|DigestOutputStream|Dimension|Dimension2D|DimensionUIResource|DirContext|DirectColorModel|DirectoryIteratorException|DirectoryManager|DirectoryNotEmptyException|DirectoryStream|DirectoryStream.Filter|DirObjectFactory|DirStateFactory|DirStateFactory.Result|DISCARDING|Dispatch|DisplayMode|DnDConstants|Doc|DocAttribute|DocAttributeSet|DocFlavor|DocFlavor.BYTE_ARRAY|DocFlavor.CHAR_ARRAY|DocFlavor.INPUT_STREAM|DocFlavor.READER|DocFlavor.SERVICE_FORMATTED|DocFlavor.STRING|DocFlavor.URL|DocPrintJob|Document|Document|DocumentationTool|DocumentationTool.DocumentationTask|DocumentationTool.Location|DocumentBuilder|DocumentBuilderFactory|Documented|DocumentEvent|DocumentEvent|DocumentEvent.ElementChange|DocumentEvent.EventType|DocumentFilter|DocumentFilter.FilterBypass|DocumentFragment|DocumentHandler|DocumentListener|DocumentName|DocumentParser|DocumentType|DocumentView|DomainCombiner|DomainLoadStoreParameter|DomainManager|DomainManagerOperations|DOMConfiguration|DOMCryptoContext|DOMError|DOMErrorHandler|DOMException|DomHandler|DOMImplementation|DOMImplementationList|DOMImplementationLS|DOMImplementationRegistry|DOMImplementationSource|DOMLocator|DOMLocator|DOMResult|DOMSignContext|DOMSource|DOMStringList|DOMStructure|DOMURIReference|DOMValidateContext|DosFileAttributes|DosFileAttributeView|Double|DoubleAccumulator|DoubleAdder|DoubleBinaryOperator|DoubleBuffer|DoubleConsumer|DoubleFunction|DoubleHolder|DoublePredicate|DoubleSeqHelper|DoubleSeqHolder|DoubleStream|DoubleStream.Builder|DoubleSummaryStatistics|DoubleSupplier|DoubleToIntFunction|DoubleToLongFunction|DoubleUnaryOperator|DragGestureEvent|DragGestureListener|DragGestureRecognizer|DragSource|DragSourceAdapter|DragSourceContext|DragSourceDragEvent|DragSourceDropEvent|DragSourceEvent|DragSourceListener|DragSourceMotionListener|Driver|DriverAction|DriverManager|DriverPropertyInfo|DropMode|DropTarget|DropTarget.DropTargetAutoScroller|DropTargetAdapter|DropTargetContext|DropTargetDragEvent|DropTargetDropEvent|DropTargetEvent|DropTargetListener|DSAGenParameterSpec|DSAKey|DSAKeyPairGenerator|DSAParameterSpec|DSAParams|DSAPrivateKey|DSAPrivateKeySpec|DSAPublicKey|DSAPublicKeySpec|DTD|DTD|DTDConstants|DTDHandler|DuplicateFormatFlagsException|DuplicateName|DuplicateNameHelper|Duration|Duration|DynamicImplementation|DynamicImplementation|DynamicMBean|DynAny|DynAny|DynAnyFactory|DynAnyFactoryHelper|DynAnyFactoryOperations|DynAnyHelper|DynAnyOperations|DynAnySeqHelper|DynArray|DynArray|DynArrayHelper|DynArrayOperations|DynEnum|DynEnum|DynEnumHelper|DynEnumOperations|DynFixed|DynFixed|DynFixedHelper|DynFixedOperations|DynSequence|DynSequence|DynSequenceHelper|DynSequenceOperations|DynStruct|DynStruct|DynStructHelper|DynStructOperations|DynUnion|DynUnion|DynUnionHelper|DynUnionOperations|DynValue|DynValue|DynValueBox|DynValueBoxOperations|DynValueCommon|DynValueCommonOperations|DynValueHelper|DynValueOperations)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(ECField|ECFieldF2m|ECFieldFp|ECGenParameterSpec|ECKey|ECParameterSpec|ECPoint|ECPrivateKey|ECPrivateKeySpec|ECPublicKey|ECPublicKeySpec|EditorKit|Element|Element|Element|Element|Element|ElementFilter|ElementIterator|ElementKind|ElementKindVisitor6|ElementKindVisitor7|ElementKindVisitor8|Elements|ElementScanner6|ElementScanner7|ElementScanner8|ElementType|ElementVisitor|Ellipse2D|Ellipse2D.Double|Ellipse2D.Float|EllipticCurve|EmptyBorder|EmptyStackException|EncodedKeySpec|Encoder|Encoding|ENCODING_CDR_ENCAPS|EncryptedPrivateKeyInfo|EndDocument|EndElement|Endpoint|EndpointContext|EndpointReference|Entity|Entity|EntityDeclaration|EntityReference|EntityReference|EntityResolver|EntityResolver2|Enum|EnumConstantNotPresentException|EnumControl|EnumControl.Type|Enumeration|EnumMap|EnumSet|EnumSyntax|Environment|EOFException|Era|Error|ErrorHandler|ErrorListener|ErrorManager|ErrorType|EtchedBorder|Event|Event|EventContext|EventDirContext|EventException|EventFilter|EventHandler|EventListener|EventListener|EventListenerList|EventListenerProxy|EventObject|EventQueue|EventReaderDelegate|EventSetDescriptor|EventTarget|ExcC14NParameterSpec|Exception|ExceptionDetailMessage|ExceptionInInitializerError|ExceptionList|ExceptionListener|Exchanger|Executable|ExecutableElement|ExecutableType|ExecutionException|Executor|ExecutorCompletionService|Executors|ExecutorService|ExemptionMechanism|ExemptionMechanismException|ExemptionMechanismSpi|ExpandVetoException|ExportException|Expression|ExtendedRequest|ExtendedResponse|ExtendedSSLSession|Extension|Externalizable|FactoryConfigurationError|FactoryConfigurationError|FailedLoginException|FaultAction|FeatureDescriptor|Fidelity|Field|FieldNameHelper|FieldNameHelper|FieldPosition|FieldView|File|FileAlreadyExistsException|FileAttribute|FileAttributeView|FileCacheImageInputStream|FileCacheImageOutputStream|FileChannel|FileChannel.MapMode|FileChooserUI|FileDataSource|FileDescriptor|FileDialog|FileFilter|FileFilter|FileHandler|FileImageInputStream|FileImageOutputStream|FileInputStream|FileLock|FileLockInterruptionException|FileNameExtensionFilter|FilenameFilter|FileNameMap|FileNotFoundException|FileObject|FileOutputStream|FileOwnerAttributeView|FilePermission|Filer|FileReader|FilerException|Files|FileStore|FileStoreAttributeView|FileSystem|FileSystemAlreadyExistsException|FileSystemException|FileSystemLoopException|FileSystemNotFoundException|FileSystemProvider|FileSystems|FileSystemView|FileTime|FileTypeDetector|FileTypeMap|FileView|FileVisitOption|FileVisitor|FileVisitResult|FileWriter|Filter|FilteredImageSource|FilteredRowSet|FilterInputStream|FilterOutputStream|FilterReader|FilterWriter|Finishings|FixedHeightLayoutCache|FixedHolder|FlatteningPathIterator|FlavorEvent|FlavorException|FlavorListener|FlavorMap|FlavorTable|Float|FloatBuffer|FloatControl|FloatControl.Type|FloatHolder|FloatSeqHelper|FloatSeqHolder|FlowLayout|FlowView|FlowView.FlowStrategy|Flushable|FocusAdapter|FocusEvent|FocusListener|FocusManager|FocusTraversalPolicy|Font|FontFormatException|FontMetrics|FontRenderContext|FontUIResource|ForkJoinPool|ForkJoinPool.ForkJoinWorkerThreadFactory|ForkJoinPool.ManagedBlocker|ForkJoinTask|ForkJoinWorkerThread|Format|Format.Field|FormatConversionProvider|FormatFlagsConversionMismatchException|FormatMismatch|FormatMismatchHelper|FormatStyle|Formattable|FormattableFlags|Formatter|Formatter|Formatter.BigDecimalLayoutForm|FormatterClosedException|FormSubmitEvent|FormSubmitEvent.MethodType|FormView|ForwardingFileObject|ForwardingJavaFileManager|ForwardingJavaFileObject|ForwardRequest|ForwardRequest|ForwardRequestHelper|ForwardRequestHelper|Frame|FREE_MEM|Function|FunctionalInterface|Future|FutureTask|GapContent|GarbageCollectorMXBean|GatheringByteChannel|GaugeMonitor|GaugeMonitorMBean|GCMParameterSpec|GeneralPath|GeneralSecurityException|Generated|GenericArrayType|GenericDeclaration|GenericSignatureFormatError|GlyphJustificationInfo|GlyphMetrics|GlyphVector|GlyphView|GlyphView.GlyphPainter|GradientPaint|GraphicAttribute|Graphics|Graphics2D|GraphicsConfigTemplate|GraphicsConfiguration|GraphicsDevice|GraphicsDevice.WindowTranslucency|GraphicsEnvironment|GrayFilter|GregorianCalendar|GridBagConstraints|GridBagLayout|GridBagLayoutInfo|GridLayout|Group|GroupLayout|GroupLayout.Alignment|GroupPrincipal|GSSContext|GSSCredential|GSSException|GSSManager|GSSName|Guard|GuardedObject|GZIPInputStream|GZIPOutputStream)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(Handler|Handler|HandlerBase|HandlerChain|HandlerResolver|HandshakeCompletedEvent|HandshakeCompletedListener|HasControls|HashAttributeSet|HashDocAttributeSet|HashMap|HashPrintJobAttributeSet|HashPrintRequestAttributeSet|HashPrintServiceAttributeSet|HashSet|Hashtable|HeadlessException|HexBinaryAdapter|HierarchyBoundsAdapter|HierarchyBoundsListener|HierarchyEvent|HierarchyListener|Highlighter|Highlighter.Highlight|Highlighter.HighlightPainter|HijrahChronology|HijrahDate|HijrahEra|HMACParameterSpec|Holder|HOLDING|HostnameVerifier|HTML|HTML.Attribute|HTML.Tag|HTML.UnknownTag|HTMLDocument|HTMLDocument.Iterator|HTMLEditorKit|HTMLEditorKit.HTMLFactory|HTMLEditorKit.HTMLTextAction|HTMLEditorKit.InsertHTMLTextAction|HTMLEditorKit.LinkController|HTMLEditorKit.Parser|HTMLEditorKit.ParserCallback|HTMLFrameHyperlinkEvent|HTMLWriter|HTTPBinding|HttpContext|HttpCookie|HTTPException|HttpExchange|HttpHandler|HttpRetryException|HttpsURLConnection|HttpURLConnection|HyperlinkEvent|HyperlinkEvent.EventType|HyperlinkListener|ICC_ColorSpace|ICC_Profile|ICC_ProfileGray|ICC_ProfileRGB|Icon|IconUIResource|IconView|ID_ASSIGNMENT_POLICY_ID|ID_UNIQUENESS_POLICY_ID|IdAssignmentPolicy|IdAssignmentPolicyOperations|IdAssignmentPolicyValue|IdentifierHelper|Identity|IdentityHashMap|IdentityScope|IDLEntity|IDLType|IDLTypeHelper|IDLTypeOperations|IDN|IdUniquenessPolicy|IdUniquenessPolicyOperations|IdUniquenessPolicyValue|IIOByteBuffer|IIOException|IIOImage|IIOInvalidTreeException|IIOMetadata|IIOMetadataController|IIOMetadataFormat|IIOMetadataFormatImpl|IIOMetadataNode|IIOParam|IIOParamController|IIOReadProgressListener|IIOReadUpdateListener|IIOReadWarningListener|IIORegistry|IIOServiceProvider|IIOWriteProgressListener|IIOWriteWarningListener|IllegalAccessError|IllegalAccessException|IllegalArgumentException|IllegalBlockingModeException|IllegalBlockSizeException|IllegalChannelGroupException|IllegalCharsetNameException|IllegalClassFormatException|IllegalComponentStateException|IllegalFormatCodePointException|IllegalFormatConversionException|IllegalFormatException|IllegalFormatFlagsException|IllegalFormatPrecisionException|IllegalFormatWidthException|IllegalMonitorStateException|IllegalPathStateException|IllegalSelectorException|IllegalStateException|IllegalThreadStateException|IllformedLocaleException|Image|ImageCapabilities|ImageConsumer|ImageFilter|ImageGraphicAttribute|ImageIcon|ImageInputStream|ImageInputStreamImpl|ImageInputStreamSpi|ImageIO|ImageObserver|ImageOutputStream|ImageOutputStreamImpl|ImageOutputStreamSpi|ImageProducer|ImageReader|ImageReaderSpi|ImageReaderWriterSpi|ImageReadParam|ImageTranscoder|ImageTranscoderSpi|ImageTypeSpecifier|ImageView|ImageWriteParam|ImageWriter|ImageWriterSpi|ImagingOpException|ImmutableDescriptor|IMP_LIMIT|IMPLICIT_ACTIVATION_POLICY_ID|ImplicitActivationPolicy|ImplicitActivationPolicyOperations|ImplicitActivationPolicyValue|INACTIVE|IncompatibleClassChangeError|IncompleteAnnotationException|InconsistentTypeCode|InconsistentTypeCode|InconsistentTypeCodeHelper|IndexColorModel|IndexedPropertyChangeEvent|IndexedPropertyDescriptor|IndexOutOfBoundsException|IndirectionException|Inet4Address|Inet6Address|InetAddress|InetSocketAddress|Inflater|InflaterInputStream|InflaterOutputStream|InheritableThreadLocal|Inherited|InitialContext|InitialContextFactory|InitialContextFactoryBuilder|InitialDirContext|INITIALIZE|InitialLdapContext|InitParam|InlineView|InputContext|InputEvent|InputMap|InputMapUIResource|InputMethod|InputMethodContext|InputMethodDescriptor|InputMethodEvent|InputMethodHighlight|InputMethodListener|InputMethodRequests|InputMismatchException|InputSource|InputStream|InputStream|InputStream|InputStreamReader|InputSubset|InputVerifier|Insets|InsetsUIResource|InstanceAlreadyExistsException|InstanceNotFoundException|Instant|InstantiationError|InstantiationException|Instrument|Instrumentation|InsufficientResourcesException|IntBinaryOperator|IntBuffer|IntConsumer|Integer|IntegerSyntax|Interceptor|InterceptorOperations|InterfaceAddress|INTERNAL|InternalError|InternalFrameAdapter|InternalFrameEvent|InternalFrameFocusTraversalPolicy|InternalFrameListener|InternalFrameUI|InternationalFormatter|InterruptedByTimeoutException|InterruptedException|InterruptedIOException|InterruptedNamingException|InterruptibleChannel|IntersectionType|INTF_REPOS|IntFunction|IntHolder|IntPredicate|IntrospectionException|IntrospectionException|Introspector|IntStream|IntStream.Builder|IntSummaryStatistics|IntSupplier|IntToDoubleFunction|IntToLongFunction|IntUnaryOperator|INV_FLAG|INV_IDENT|INV_OBJREF|INV_POLICY|Invalid|INVALID_ACTIVITY|INVALID_TRANSACTION|InvalidActivityException|InvalidAddress|InvalidAddressHelper|InvalidAddressHolder|InvalidAlgorithmParameterException|InvalidApplicationException|InvalidAttributeIdentifierException|InvalidAttributesException|InvalidAttributeValueException|InvalidAttributeValueException|InvalidClassException|InvalidDnDOperationException|InvalidKeyException|InvalidKeyException|InvalidKeySpecException|InvalidMarkException|InvalidMidiDataException|InvalidName|InvalidName|InvalidName|InvalidNameException|InvalidNameHelper|InvalidNameHelper|InvalidNameHolder|InvalidObjectException|InvalidOpenTypeException|InvalidParameterException|InvalidParameterSpecException|InvalidPathException|InvalidPolicy|InvalidPolicyHelper|InvalidPreferencesFormatException|InvalidPropertiesFormatException|InvalidRelationIdException|InvalidRelationServiceException|InvalidRelationTypeException|InvalidRoleInfoException|InvalidRoleValueException|InvalidSearchControlsException|InvalidSearchFilterException|InvalidSeq|InvalidSlot|InvalidSlotHelper|InvalidTargetObjectTypeException|InvalidTransactionException|InvalidTypeForEncoding|InvalidTypeForEncodingHelper|InvalidValue|InvalidValue|InvalidValueHelper|Invocable|InvocationEvent|InvocationHandler|InvocationTargetException|InvokeHandler|Invoker|IOError|IOException|IOR|IORHelper|IORHolder|IORInfo|IORInfoOperations|IORInterceptor|IORInterceptor_3_0|IORInterceptor_3_0Helper|IORInterceptor_3_0Holder|IORInterceptor_3_0Operations|IORInterceptorOperations|IRObject|IRObjectOperations|IsoChronology|IsoEra|IsoFields|IstringHelper|ItemEvent|ItemListener|ItemSelectable|Iterable|Iterator|IvParameterSpec|JapaneseChronology|JapaneseDate|JapaneseEra|JApplet|JarEntry|JarException|JarFile|JarInputStream|JarOutputStream|JarURLConnection|JavaCompiler|JavaCompiler.CompilationTask|JavaFileManager|JavaFileManager.Location|JavaFileObject|JavaFileObject.Kind|JAXB|JAXBContext|JAXBElement|JAXBElement.GlobalScope|JAXBException|JAXBIntrospector|JAXBPermission|JAXBResult|JAXBSource|JButton|JCheckBox|JCheckBoxMenuItem|JColorChooser|JComboBox|JComboBox.KeySelectionManager|JComponent|JdbcRowSet|JDBCType|JDesktopPane|JDialog|JEditorPane|JFileChooser|JFormattedTextField|JFormattedTextField.AbstractFormatter|JFormattedTextField.AbstractFormatterFactory|JFrame|JInternalFrame|JInternalFrame.JDesktopIcon|JLabel|JLayer|JLayeredPane|JList|JList.DropLocation|JMenu|JMenuBar|JMenuItem|JMException|JMRuntimeException|JMX|JMXAddressable|JMXAuthenticator|JMXConnectionNotification|JMXConnector|JMXConnectorFactory|JMXConnectorProvider|JMXConnectorServer|JMXConnectorServerFactory|JMXConnectorServerMBean|JMXConnectorServerProvider|JMXPrincipal|JMXProviderException|JMXServerErrorException|JMXServiceURL|JobAttributes|JobAttributes.DefaultSelectionType|JobAttributes.DestinationType|JobAttributes.DialogType|JobAttributes.MultipleDocumentHandlingType|JobAttributes.SidesType|JobHoldUntil|JobImpressions|JobImpressionsCompleted|JobImpressionsSupported|JobKOctets|JobKOctetsProcessed|JobKOctetsSupported|JobMediaSheets|JobMediaSheetsCompleted|JobMediaSheetsSupported|JobMessageFromOperator|JobName|JobOriginatingUserName|JobPriority|JobPrioritySupported|JobSheets|JobState|JobStateReason|JobStateReasons|Joinable|JoinRowSet|JOptionPane|JPanel|JPasswordField|JPEGHuffmanTable|JPEGImageReadParam|JPEGImageWriteParam|JPEGQTable|JPopupMenu|JPopupMenu.Separator|JProgressBar|JRadioButton|JRadioButtonMenuItem|JRootPane|JScrollBar|JScrollPane|JSeparator|JSlider|JSpinner|JSpinner.DateEditor|JSpinner.DefaultEditor|JSpinner.ListEditor|JSpinner.NumberEditor|JSplitPane|JTabbedPane|JTable|JTable.DropLocation|JTable.PrintMode|JTableHeader|JTextArea|JTextComponent|JTextComponent.DropLocation|JTextComponent.KeyBinding|JTextField|JTextPane|JToggleButton|JToggleButton.ToggleButtonModel|JToolBar|JToolBar.Separator|JToolTip|JTree|JTree.DropLocation|JTree.DynamicUtilTreeNode|JTree.EmptySelectionModel|JulianFields|JViewport|JWindow)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(KerberosKey|KerberosPrincipal|KerberosTicket|Kernel|Key|KeyAdapter|KeyAgreement|KeyAgreementSpi|KeyAlreadyExistsException|KeyboardFocusManager|KeyEvent|KeyEventDispatcher|KeyEventPostProcessor|KeyException|KeyFactory|KeyFactorySpi|KeyGenerator|KeyGeneratorSpi|KeyInfo|KeyInfoFactory|KeyListener|KeyManagementException|KeyManager|KeyManagerFactory|KeyManagerFactorySpi|Keymap|KeyName|KeyPair|KeyPairGenerator|KeyPairGeneratorSpi|KeyRep|KeyRep.Type|KeySelector|KeySelector.Purpose|KeySelectorException|KeySelectorResult|KeySpec|KeyStore|KeyStore.Builder|KeyStore.CallbackHandlerProtection|KeyStore.Entry|KeyStore.Entry.Attribute|KeyStore.LoadStoreParameter|KeyStore.PasswordProtection|KeyStore.PrivateKeyEntry|KeyStore.ProtectionParameter|KeyStore.SecretKeyEntry|KeyStore.TrustedCertificateEntry|KeyStoreBuilderParameters|KeyStoreException|KeyStoreSpi|KeyStroke|KeyTab|KeyValue|Label|LabelUI|LabelView|LambdaConversionException|LambdaMetafactory|LanguageCallback|LastOwnerException|LayeredHighlighter|LayeredHighlighter.LayerPainter|LayerUI|LayoutFocusTraversalPolicy|LayoutManager|LayoutManager2|LayoutPath|LayoutQueue|LayoutStyle|LayoutStyle.ComponentPlacement|LDAPCertStoreParameters|LdapContext|LdapName|LdapReferralException|Lease|Level|LexicalHandler|LIFESPAN_POLICY_ID|LifespanPolicy|LifespanPolicyOperations|LifespanPolicyValue|LimitExceededException|Line|Line.Info|Line2D|Line2D.Double|Line2D.Float|LinearGradientPaint|LineBorder|LineBreakMeasurer|LineEvent|LineEvent.Type|LineListener|LineMetrics|LineNumberInputStream|LineNumberReader|LineUnavailableException|LinkageError|LinkedBlockingDeque|LinkedBlockingQueue|LinkedHashMap|LinkedHashSet|LinkedList|LinkedTransferQueue|LinkException|LinkLoopException|LinkOption|LinkPermission|LinkRef|List|List|ListCellRenderer|ListDataEvent|ListDataListener|ListenerNotFoundException|ListIterator|ListModel|ListResourceBundle|ListSelectionEvent|ListSelectionListener|ListSelectionModel|ListUI|ListView|LoaderHandler|LocalDate|LocalDateTime|Locale|Locale.Builder|Locale.Category|Locale.FilteringMode|Locale.LanguageRange|LocaleNameProvider|LocaleServiceProvider|LocalObject|LocalTime|LocateRegistry|Location|LOCATION_FORWARD|Locator|Locator2|Locator2Impl|LocatorImpl|Lock|LockInfo|LockSupport|Logger|LoggingMXBean|LoggingPermission|LogicalHandler|LogicalMessage|LogicalMessageContext|LoginContext|LoginException|LoginModule|LogManager|LogRecord|LogStream|Long|LongAccumulator|LongAdder|LongBinaryOperator|LongBuffer|LongConsumer|LongFunction|LongHolder|LongLongSeqHelper|LongLongSeqHolder|LongPredicate|LongSeqHelper|LongSeqHolder|LongStream|LongStream.Builder|LongSummaryStatistics|LongSupplier|LongToDoubleFunction|LongToIntFunction|LongUnaryOperator|LookAndFeel|LookupOp|LookupTable|LSException|LSInput|LSLoadEvent|LSOutput|LSParser|LSParserFilter|LSProgressEvent|LSResourceResolver|LSSerializer|LSSerializerFilter)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(Mac|MacSpi|MailcapCommandMap|MalformedInputException|MalformedLinkException|MalformedObjectNameException|MalformedParameterizedTypeException|MalformedParametersException|MalformedURLException|ManagementFactory|ManagementPermission|ManageReferralControl|ManagerFactoryParameters|Manifest|Manifest|Map|Map.Entry|MappedByteBuffer|MARSHAL|MarshalException|MarshalException|MarshalException|MarshalledObject|Marshaller|Marshaller.Listener|MaskFormatter|Matcher|MatchResult|Math|MathContext|MatteBorder|MBeanAttributeInfo|MBeanConstructorInfo|MBeanException|MBeanFeatureInfo|MBeanInfo|MBeanNotificationInfo|MBeanOperationInfo|MBeanParameterInfo|MBeanPermission|MBeanRegistration|MBeanRegistrationException|MBeanServer|MBeanServerBuilder|MBeanServerConnection|MBeanServerDelegate|MBeanServerDelegateMBean|MBeanServerFactory|MBeanServerForwarder|MBeanServerInvocationHandler|MBeanServerNotification|MBeanServerNotificationFilter|MBeanServerPermission|MBeanTrustPermission|Media|MediaName|MediaPrintableArea|MediaSize|MediaSize.Engineering|MediaSize.ISO|MediaSize.JIS|MediaSize.NA|MediaSize.Other|MediaSizeName|MediaTracker|MediaTray|Member|MembershipKey|MemoryCacheImageInputStream|MemoryCacheImageOutputStream|MemoryHandler|MemoryImageSource|MemoryManagerMXBean|MemoryMXBean|MemoryNotificationInfo|MemoryPoolMXBean|MemoryType|MemoryUsage|Menu|MenuBar|MenuBarUI|MenuComponent|MenuContainer|MenuDragMouseEvent|MenuDragMouseListener|MenuElement|MenuEvent|MenuItem|MenuItemUI|MenuKeyEvent|MenuKeyListener|MenuListener|MenuSelectionManager|MenuShortcut|MessageContext|MessageContext.Scope|MessageDigest|MessageDigestSpi|MessageFactory|MessageFormat|MessageFormat.Field|MessageProp|Messager|MetaEventListener|MetalBorders|MetalBorders.ButtonBorder|MetalBorders.Flush3DBorder|MetalBorders.InternalFrameBorder|MetalBorders.MenuBarBorder|MetalBorders.MenuItemBorder|MetalBorders.OptionDialogBorder|MetalBorders.PaletteBorder|MetalBorders.PopupMenuBorder|MetalBorders.RolloverButtonBorder|MetalBorders.ScrollPaneBorder|MetalBorders.TableHeaderBorder|MetalBorders.TextFieldBorder|MetalBorders.ToggleButtonBorder|MetalBorders.ToolBarBorder|MetalButtonUI|MetalCheckBoxIcon|MetalCheckBoxUI|MetalComboBoxButton|MetalComboBoxEditor|MetalComboBoxEditor.UIResource|MetalComboBoxIcon|MetalComboBoxUI|MetalDesktopIconUI|MetalFileChooserUI|MetalIconFactory|MetalIconFactory.FileIcon16|MetalIconFactory.FolderIcon16|MetalIconFactory.PaletteCloseIcon|MetalIconFactory.TreeControlIcon|MetalIconFactory.TreeFolderIcon|MetalIconFactory.TreeLeafIcon|MetalInternalFrameTitlePane|MetalInternalFrameUI|MetalLabelUI|MetalLookAndFeel|MetalMenuBarUI|MetalPopupMenuSeparatorUI|MetalProgressBarUI|MetalRadioButtonUI|MetalRootPaneUI|MetalScrollBarUI|MetalScrollButton|MetalScrollPaneUI|MetalSeparatorUI|MetalSliderUI|MetalSplitPaneUI|MetalTabbedPaneUI|MetalTextFieldUI|MetalTheme|MetalToggleButtonUI|MetalToolBarUI|MetalToolTipUI|MetalTreeUI|MetaMessage|Method|MethodDescriptor|MethodHandle|MethodHandleInfo|MethodHandleProxies|MethodHandles|MethodHandles.Lookup|MethodType|MGF1ParameterSpec|MidiChannel|MidiDevice|MidiDevice.Info|MidiDeviceProvider|MidiDeviceReceiver|MidiDeviceTransmitter|MidiEvent|MidiFileFormat|MidiFileReader|MidiFileWriter|MidiMessage|MidiSystem|MidiUnavailableException|MimeHeader|MimeHeaders|MimeType|MimeTypeParameterList|MimeTypeParseException|MimeTypeParseException|MimetypesFileTypeMap|MinguoChronology|MinguoDate|MinguoEra|MinimalHTMLWriter|MirroredTypeException|MirroredTypesException|MissingFormatArgumentException|MissingFormatWidthException|MissingResourceException|Mixer|Mixer.Info|MixerProvider|MLet|MLetContent|MLetMBean|ModelMBean|ModelMBeanAttributeInfo|ModelMBeanConstructorInfo|ModelMBeanInfo|ModelMBeanInfoSupport|ModelMBeanNotificationBroadcaster|ModelMBeanNotificationInfo|ModelMBeanOperationInfo|ModificationItem|Modifier|Modifier|Monitor|MonitorInfo|MonitorMBean|MonitorNotification|MonitorSettingException|Month|MonthDay|MouseAdapter|MouseDragGestureRecognizer|MouseEvent|MouseEvent|MouseInfo|MouseInputAdapter|MouseInputListener|MouseListener|MouseMotionAdapter|MouseMotionListener|MouseWheelEvent|MouseWheelListener|MTOM|MTOMFeature|MultiButtonUI|MulticastChannel|MulticastSocket|MultiColorChooserUI|MultiComboBoxUI|MultiDesktopIconUI|MultiDesktopPaneUI|MultiDoc|MultiDocPrintJob|MultiDocPrintService|MultiFileChooserUI|MultiInternalFrameUI|MultiLabelUI|MultiListUI|MultiLookAndFeel|MultiMenuBarUI|MultiMenuItemUI|MultiOptionPaneUI|MultiPanelUI|MultiPixelPackedSampleModel|MultipleComponentProfileHelper|MultipleComponentProfileHolder|MultipleDocumentHandling|MultipleGradientPaint|MultipleGradientPaint.ColorSpaceType|MultipleGradientPaint.CycleMethod|MultipleMaster|MultiPopupMenuUI|MultiProgressBarUI|MultiRootPaneUI|MultiScrollBarUI|MultiScrollPaneUI|MultiSeparatorUI|MultiSliderUI|MultiSpinnerUI|MultiSplitPaneUI|MultiTabbedPaneUI|MultiTableHeaderUI|MultiTableUI|MultiTextUI|MultiToolBarUI|MultiToolTipUI|MultiTreeUI|MultiViewportUI|MutableAttributeSet|MutableCallSite|MutableComboBoxModel|MutableTreeNode|MutationEvent|MXBean|Name|Name|Name|NameAlreadyBoundException|NameCallback|NameClassPair|NameComponent|NameComponentHelper|NameComponentHolder|NamedNodeMap|NamedValue|NameDynAnyPair|NameDynAnyPairHelper|NameDynAnyPairSeqHelper|NameHelper|NameHolder|NameList|NameNotFoundException|NameParser|Namespace|NamespaceChangeListener|NamespaceContext|NamespaceSupport|NameValuePair|NameValuePair|NameValuePairHelper|NameValuePairHelper|NameValuePairSeqHelper|Naming|NamingContext|NamingContextExt|NamingContextExtHelper|NamingContextExtHolder|NamingContextExtOperations|NamingContextExtPOA|NamingContextHelper|NamingContextHolder|NamingContextOperations|NamingContextPOA|NamingEnumeration|NamingEvent|NamingException|NamingExceptionEvent|NamingListener|NamingManager|NamingSecurityException|Native|NavigableMap|NavigableSet|NavigationFilter|NavigationFilter.FilterBypass|NClob|NegativeArraySizeException|NestingKind|NetPermission|NetworkChannel|NetworkInterface|NimbusLookAndFeel|NimbusStyle|NO_IMPLEMENT|NO_MEMORY|NO_PERMISSION|NO_RESOURCES|NO_RESPONSE|NoClassDefFoundError|NoConnectionPendingException|NoContext|NoContextHelper|Node|Node|NodeChangeEvent|NodeChangeListener|NodeList|NodeSetData|NoInitialContextException|NON_EXISTENT|NoninvertibleTransformException|NonReadableChannelException|NonWritableChannelException|NoPermissionException|NormalizedStringAdapter|Normalizer|Normalizer.Form|NoRouteToHostException|NoServant|NoServantHelper|NoSuchAlgorithmException|NoSuchAttributeException|NoSuchElementException|NoSuchFieldError|NoSuchFieldException|NoSuchFileException|NoSuchMechanismException|NoSuchMethodError|NoSuchMethodException|NoSuchObjectException|NoSuchPaddingException|NoSuchProviderException|NotActiveException|Notation|NotationDeclaration|NotBoundException|NotCompliantMBeanException|NotContextException|NotDirectoryException|NotEmpty|NotEmptyHelper|NotEmptyHolder|NotFound|NotFoundHelper|NotFoundHolder|NotFoundReason|NotFoundReasonHelper|NotFoundReasonHolder|NotIdentifiableEvent|NotIdentifiableEventImpl|Notification|NotificationBroadcaster|NotificationBroadcasterSupport|NotificationEmitter|NotificationFilter|NotificationFilterSupport|NotificationListener|NotificationResult|NotLinkException|NotOwnerException|NotSerializableException|NotYetBoundException|NotYetConnectedException|NoType|NullCipher|NullPointerException|NullType|Number|NumberFormat|NumberFormat.Field|NumberFormatException|NumberFormatProvider|NumberFormatter|NumberOfDocuments|NumberOfInterveningJobs|NumberUp|NumberUpSupported|NumericShaper|NumericShaper.Range|NVList)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(OAEPParameterSpec|OBJ_ADAPTER|ObjDoubleConsumer|Object|Object|OBJECT_NOT_EXIST|ObjectAlreadyActive|ObjectAlreadyActiveHelper|ObjectChangeListener|ObjectFactory|ObjectFactoryBuilder|ObjectHelper|ObjectHolder|ObjectIdHelper|ObjectIdHelper|ObjectImpl|ObjectImpl|ObjectInput|ObjectInputStream|ObjectInputStream.GetField|ObjectInputValidation|ObjectInstance|ObjectName|ObjectNotActive|ObjectNotActiveHelper|ObjectOutput|ObjectOutputStream|ObjectOutputStream.PutField|ObjectReferenceFactory|ObjectReferenceFactoryHelper|ObjectReferenceFactoryHolder|ObjectReferenceTemplate|ObjectReferenceTemplateHelper|ObjectReferenceTemplateHolder|ObjectReferenceTemplateSeqHelper|ObjectReferenceTemplateSeqHolder|Objects|ObjectStreamClass|ObjectStreamConstants|ObjectStreamException|ObjectStreamField|ObjectView|ObjID|ObjIntConsumer|ObjLongConsumer|Observable|Observer|OceanTheme|OctetSeqHelper|OctetSeqHolder|OctetStreamData|OffsetDateTime|OffsetTime|Oid|OMGVMCID|Oneway|OpenDataException|OpenMBeanAttributeInfo|OpenMBeanAttributeInfoSupport|OpenMBeanConstructorInfo|OpenMBeanConstructorInfoSupport|OpenMBeanInfo|OpenMBeanInfoSupport|OpenMBeanOperationInfo|OpenMBeanOperationInfoSupport|OpenMBeanParameterInfo|OpenMBeanParameterInfoSupport|OpenOption|OpenType|OpenType|OperatingSystemMXBean|Operation|OperationNotSupportedException|OperationsException|Option|Optional|OptionalDataException|OptionalDouble|OptionalInt|OptionalLong|OptionChecker|OptionPaneUI|ORB|ORB|ORBIdHelper|ORBInitializer|ORBInitializerOperations|ORBInitInfo|ORBInitInfoOperations|OrientationRequested|OutOfMemoryError|OutputDeviceAssigned|OutputKeys|OutputStream|OutputStream|OutputStream|OutputStreamWriter|OverlappingFileLockException|OverlayLayout|Override|Owner|Pack200|Pack200.Packer|Pack200.Unpacker|Package|PackageElement|PackedColorModel|Pageable|PageAttributes|PageAttributes.ColorType|PageAttributes.MediaType|PageAttributes.OrientationRequestedType|PageAttributes.OriginType|PageAttributes.PrintQualityType|PagedResultsControl|PagedResultsResponseControl|PageFormat|PageRanges|PagesPerMinute|PagesPerMinuteColor|Paint|PaintContext|Painter|PaintEvent|Panel|PanelUI|Paper|ParagraphView|ParagraphView|Parameter|Parameter|ParameterBlock|ParameterDescriptor|Parameterizable|ParameterizedType|ParameterMetaData|ParameterMode|ParameterModeHelper|ParameterModeHolder|ParseConversionEvent|ParseConversionEventImpl|ParseException|ParsePosition|Parser|Parser|ParserAdapter|ParserConfigurationException|ParserDelegator|ParserFactory|PartialResultException|PasswordAuthentication|PasswordCallback|PasswordView|Patch|Path|Path2D|Path2D.Double|Path2D.Float|PathIterator|PathMatcher|Paths|Pattern|PatternSyntaxException|PBEKey|PBEKeySpec|PBEParameterSpec|PDLOverrideSupported|Period|Permission|Permission|PermissionCollection|Permissions|PERSIST_STORE|PersistenceDelegate|PersistentMBean|PGPData|PhantomReference|Phaser|Pipe|Pipe.SinkChannel|Pipe.SourceChannel|PipedInputStream|PipedOutputStream|PipedReader|PipedWriter|PixelGrabber|PixelInterleavedSampleModel|PKCS12Attribute|PKCS8EncodedKeySpec|PKIXBuilderParameters|PKIXCertPathBuilderResult|PKIXCertPathChecker|PKIXCertPathValidatorResult|PKIXParameters|PKIXReason|PKIXRevocationChecker|PKIXRevocationChecker.Option|PlainDocument|PlainView|PlatformLoggingMXBean|PlatformManagedObject|POA|POAHelper|POAManager|POAManagerOperations|POAOperations|Point|Point2D|Point2D.Double|Point2D.Float|PointerInfo|Policy|Policy|Policy|Policy.Parameters|PolicyError|PolicyErrorCodeHelper|PolicyErrorHelper|PolicyErrorHolder|PolicyFactory|PolicyFactoryOperations|PolicyHelper|PolicyHolder|PolicyListHelper|PolicyListHolder|PolicyNode|PolicyOperations|PolicyQualifierInfo|PolicySpi|PolicyTypeHelper|Polygon|PooledConnection|Popup|PopupFactory|PopupMenu|PopupMenuEvent|PopupMenuListener|PopupMenuUI|Port|Port.Info|PortableRemoteObject|PortableRemoteObjectDelegate|PortInfo|PortUnreachableException|Position|Position.Bias|PosixFileAttributes|PosixFileAttributeView|PosixFilePermission|PosixFilePermissions|PostConstruct|PreDestroy|Predicate|Predicate|PreferenceChangeEvent|PreferenceChangeListener|Preferences|PreferencesFactory|PreparedStatement|PresentationDirection|PrimitiveIterator|PrimitiveIterator.OfDouble|PrimitiveIterator.OfInt|PrimitiveIterator.OfLong|PrimitiveType|Principal|Principal|PrincipalHolder|Printable|PrintConversionEvent|PrintConversionEventImpl|PrinterAbortException|PrinterException|PrinterGraphics|PrinterInfo|PrinterIOException|PrinterIsAcceptingJobs|PrinterJob|PrinterLocation|PrinterMakeAndModel|PrinterMessageFromOperator|PrinterMoreInfo|PrinterMoreInfoManufacturer|PrinterName|PrinterResolution|PrinterState|PrinterStateReason|PrinterStateReasons|PrinterURI|PrintEvent|PrintException|PrintGraphics|PrintJob|PrintJobAdapter|PrintJobAttribute|PrintJobAttributeEvent|PrintJobAttributeListener|PrintJobAttributeSet|PrintJobEvent|PrintJobListener|PrintQuality|PrintRequestAttribute|PrintRequestAttributeSet|PrintService|PrintServiceAttribute|PrintServiceAttributeEvent|PrintServiceAttributeListener|PrintServiceAttributeSet|PrintServiceLookup|PrintStream|PrintWriter|PriorityBlockingQueue|PriorityQueue|PRIVATE_MEMBER|PrivateClassLoader|PrivateCredentialPermission|PrivateKey|PrivateMLet|PrivilegedAction|PrivilegedActionException|PrivilegedExceptionAction|Process|ProcessBuilder|ProcessBuilder.Redirect|ProcessBuilder.Redirect.Type|ProcessingEnvironment|ProcessingInstruction|ProcessingInstruction|Processor|ProfileDataException|ProfileIdHelper|ProgressBarUI|ProgressMonitor|ProgressMonitorInputStream|Properties|PropertyChangeEvent|PropertyChangeListener|PropertyChangeListenerProxy|PropertyChangeSupport|PropertyDescriptor|PropertyEditor|PropertyEditorManager|PropertyEditorSupport|PropertyException|PropertyPermission|PropertyResourceBundle|PropertyVetoException|ProtectionDomain|ProtocolException|ProtocolException|ProtocolFamily|Provider|Provider|Provider|Provider.Service|ProviderException|ProviderMismatchException|ProviderNotFoundException|Proxy|Proxy|Proxy.Type|ProxySelector|PseudoColumnUsage|PSource|PSource.PSpecified|PSSParameterSpec|PUBLIC_MEMBER|PublicKey|PushbackInputStream|PushbackReader)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(QName|QuadCurve2D|QuadCurve2D.Double|QuadCurve2D.Float|QualifiedNameable|Query|QueryEval|QueryExp|Queue|QueuedJobCount|RadialGradientPaint|Random|RandomAccess|RandomAccessFile|Raster|RasterFormatException|RasterOp|RC2ParameterSpec|RC5ParameterSpec|Rdn|Readable|ReadableByteChannel|Reader|ReadOnlyBufferException|ReadOnlyFileSystemException|ReadPendingException|ReadWriteLock|RealmCallback|RealmChoiceCallback|REBIND|Receiver|Rectangle|Rectangle2D|Rectangle2D.Double|Rectangle2D.Float|RectangularShape|RecursiveAction|RecursiveTask|ReentrantLock|ReentrantReadWriteLock|ReentrantReadWriteLock.ReadLock|ReentrantReadWriteLock.WriteLock|Ref|RefAddr|Reference|Reference|Reference|Referenceable|ReferenceQueue|ReferenceType|ReferenceUriSchemesSupported|ReferralException|ReflectionException|ReflectiveOperationException|ReflectPermission|Refreshable|RefreshFailedException|Region|RegisterableService|Registry|RegistryHandler|RejectedExecutionException|RejectedExecutionHandler|Relation|RelationException|RelationNotFoundException|RelationNotification|RelationService|RelationServiceMBean|RelationServiceNotRegisteredException|RelationSupport|RelationSupportMBean|RelationType|RelationTypeNotFoundException|RelationTypeSupport|RemarshalException|Remote|RemoteCall|RemoteException|RemoteObject|RemoteObjectInvocationHandler|RemoteRef|RemoteServer|RemoteStub|RenderableImage|RenderableImageOp|RenderableImageProducer|RenderContext|RenderedImage|RenderedImageFactory|Renderer|RenderingHints|RenderingHints.Key|RepaintManager|Repeatable|ReplicateScaleFilter|RepositoryIdHelper|Request|REQUEST_PROCESSING_POLICY_ID|RequestInfo|RequestInfoOperations|RequestingUserName|RequestProcessingPolicy|RequestProcessingPolicyOperations|RequestProcessingPolicyValue|RequestWrapper|RequiredModelMBean|RescaleOp|ResolutionSyntax|Resolver|ResolveResult|ResolverStyle|Resource|Resource.AuthenticationType|ResourceBundle|ResourceBundle.Control|ResourceBundleControlProvider|Resources|RespectBinding|RespectBindingFeature|Response|ResponseCache|ResponseHandler|ResponseWrapper|Result|ResultSet|ResultSetMetaData|Retention|RetentionPolicy|RetrievalMethod|ReverbType|RGBImageFilter|RMIClassLoader|RMIClassLoaderSpi|RMIClientSocketFactory|RMIConnection|RMIConnectionImpl|RMIConnectionImpl_Stub|RMIConnector|RMIConnectorServer|RMICustomMaxStreamFormat|RMIFailureHandler|RMIIIOPServerImpl|RMIJRMPServerImpl|RMISecurityException|RMISecurityManager|RMIServer|RMIServerImpl|RMIServerImpl_Stub|RMIServerSocketFactory|RMISocketFactory|Robot|Role|RoleInfo|RoleInfoNotFoundException|RoleList|RoleNotFoundException|RoleResult|RoleStatus|RoleUnresolved|RoleUnresolvedList|RootPaneContainer|RootPaneUI|RoundEnvironment|RoundingMode|RoundRectangle2D|RoundRectangle2D.Double|RoundRectangle2D.Float|RowFilter|RowFilter.ComparisonType|RowFilter.Entry|RowId|RowIdLifetime|RowMapper|RowSet|RowSetEvent|RowSetFactory|RowSetInternal|RowSetListener|RowSetMetaData|RowSetMetaDataImpl|RowSetProvider|RowSetReader|RowSetWarning|RowSetWriter|RowSorter|RowSorter.SortKey|RowSorterEvent|RowSorterEvent.Type|RowSorterListener|RSAKey|RSAKeyGenParameterSpec|RSAMultiPrimePrivateCrtKey|RSAMultiPrimePrivateCrtKeySpec|RSAOtherPrimeInfo|RSAPrivateCrtKey|RSAPrivateCrtKeySpec|RSAPrivateKey|RSAPrivateKeySpec|RSAPublicKey|RSAPublicKeySpec|RTFEditorKit|RuleBasedCollator|Runnable|RunnableFuture|RunnableScheduledFuture|Runtime|RunTime|RuntimeErrorException|RuntimeException|RuntimeMBeanException|RuntimeMXBean|RunTimeOperations|RuntimeOperationsException|RuntimePermission)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(SAAJMetaFactory|SAAJResult|SafeVarargs|SampleModel|Sasl|SaslClient|SaslClientFactory|SaslException|SaslServer|SaslServerFactory|Savepoint|SAXException|SAXNotRecognizedException|SAXNotSupportedException|SAXParseException|SAXParser|SAXParserFactory|SAXResult|SAXSource|SAXTransformerFactory|Scanner|ScatteringByteChannel|ScheduledExecutorService|ScheduledFuture|ScheduledThreadPoolExecutor|Schema|SchemaFactory|SchemaFactoryConfigurationError|SchemaFactoryLoader|SchemaOutputResolver|SchemaViolationException|ScriptContext|ScriptEngine|ScriptEngineFactory|ScriptEngineManager|ScriptException|Scrollable|Scrollbar|ScrollBarUI|ScrollPane|ScrollPaneAdjustable|ScrollPaneConstants|ScrollPaneLayout|ScrollPaneLayout.UIResource|ScrollPaneUI|SealedObject|SearchControls|SearchResult|SecondaryLoop|SecretKey|SecretKeyFactory|SecretKeyFactorySpi|SecretKeySpec|SecureCacheResponse|SecureClassLoader|SecureDirectoryStream|SecureRandom|SecureRandomSpi|Security|SecurityException|SecurityManager|SecurityPermission|SeekableByteChannel|Segment|SelectableChannel|SelectionKey|Selector|SelectorProvider|Semaphore|SeparatorUI|Sequence|SequenceInputStream|Sequencer|Sequencer.SyncMode|SerialArray|SerialBlob|SerialClob|SerialDatalink|SerialException|Serializable|SerializablePermission|SerializedLambda|SerialJavaObject|SerialRef|SerialStruct|Servant|SERVANT_RETENTION_POLICY_ID|ServantActivator|ServantActivatorHelper|ServantActivatorOperations|ServantActivatorPOA|ServantAlreadyActive|ServantAlreadyActiveHelper|ServantLocator|ServantLocatorHelper|ServantLocatorOperations|ServantLocatorPOA|ServantManager|ServantManagerOperations|ServantNotActive|ServantNotActiveHelper|ServantObject|ServantRetentionPolicy|ServantRetentionPolicyOperations|ServantRetentionPolicyValue|ServerCloneException|ServerError|ServerException|ServerIdHelper|ServerNotActiveException|ServerRef|ServerRequest|ServerRequestInfo|ServerRequestInfoOperations|ServerRequestInterceptor|ServerRequestInterceptorOperations|ServerRuntimeException|ServerSocket|ServerSocketChannel|ServerSocketFactory|Service|Service.Mode|ServiceConfigurationError|ServiceContext|ServiceContextHelper|ServiceContextHolder|ServiceContextListHelper|ServiceContextListHolder|ServiceDelegate|ServiceDetail|ServiceDetailHelper|ServiceIdHelper|ServiceInformation|ServiceInformationHelper|ServiceInformationHolder|ServiceLoader|ServiceMode|ServiceNotFoundException|ServicePermission|ServiceRegistry|ServiceRegistry.Filter|ServiceUI|ServiceUIFactory|ServiceUnavailableException|Set|SetOfIntegerSyntax|SetOverrideType|SetOverrideTypeHelper|Severity|Shape|ShapeGraphicAttribute|SheetCollate|Short|ShortBuffer|ShortBufferException|ShortHolder|ShortLookupTable|ShortMessage|ShortSeqHelper|ShortSeqHolder|ShutdownChannelGroupException|Sides|Signature|SignatureException|SignatureMethod|SignatureMethodParameterSpec|SignatureProperties|SignatureProperty|SignatureSpi|SignedInfo|SignedObject|Signer|SignStyle|SimpleAnnotationValueVisitor6|SimpleAnnotationValueVisitor7|SimpleAnnotationValueVisitor8|SimpleAttributeSet|SimpleBeanInfo|SimpleBindings|SimpleDateFormat|SimpleDoc|SimpleElementVisitor6|SimpleElementVisitor7|SimpleElementVisitor8|SimpleFileVisitor|SimpleFormatter|SimpleJavaFileObject|SimpleScriptContext|SimpleTimeZone|SimpleType|SimpleTypeVisitor6|SimpleTypeVisitor7|SimpleTypeVisitor8|SinglePixelPackedSampleModel|SingleSelectionModel|Size2DSyntax|SizeLimitExceededException|SizeRequirements|SizeSequence|Skeleton|SkeletonMismatchException|SkeletonNotFoundException|SliderUI|SNIHostName|SNIMatcher|SNIServerName|SOAPBinding|SOAPBinding|SOAPBinding.ParameterStyle|SOAPBinding.Style|SOAPBinding.Use|SOAPBody|SOAPBodyElement|SOAPConnection|SOAPConnectionFactory|SOAPConstants|SOAPElement|SOAPElementFactory|SOAPEnvelope|SOAPException|SOAPFactory|SOAPFault|SOAPFaultElement|SOAPFaultException|SOAPHandler|SOAPHeader|SOAPHeaderElement|SOAPMessage|SOAPMessageContext|SOAPMessageHandler|SOAPMessageHandlers|SOAPPart|Socket|SocketAddress|SocketChannel|SocketException|SocketFactory|SocketHandler|SocketImpl|SocketImplFactory|SocketOption|SocketOptions|SocketPermission|SocketSecurityException|SocketTimeoutException|SoftBevelBorder|SoftReference|SortControl|SortedMap|SortedSet|SortingFocusTraversalPolicy|SortKey|SortOrder|SortResponseControl|Soundbank|SoundbankReader|SoundbankResource|Source|SourceDataLine|SourceLocator|SourceVersion|SpinnerDateModel|SpinnerListModel|SpinnerModel|SpinnerNumberModel|SpinnerUI|SplashScreen|Spliterator|Spliterator.OfDouble|Spliterator.OfInt|Spliterator.OfLong|Spliterator.OfPrimitive|Spliterators|Spliterators.AbstractDoubleSpliterator|Spliterators.AbstractIntSpliterator|Spliterators.AbstractLongSpliterator|Spliterators.AbstractSpliterator|SplitPaneUI|SplittableRandom|Spring|SpringLayout|SpringLayout.Constraints|SQLClientInfoException|SQLData|SQLDataException|SQLException|SQLFeatureNotSupportedException|SQLInput|SQLInputImpl|SQLIntegrityConstraintViolationException|SQLInvalidAuthorizationSpecException|SQLNonTransientConnectionException|SQLNonTransientException|SQLOutput|SQLOutputImpl|SQLPermission|SQLRecoverableException|SQLSyntaxErrorException|SQLTimeoutException|SQLTransactionRollbackException|SQLTransientConnectionException|SQLTransientException|SQLType|SQLWarning|SQLXML|SSLContext|SSLContextSpi|SSLEngine|SSLEngineResult|SSLEngineResult.HandshakeStatus|SSLEngineResult.Status|SSLException|SSLHandshakeException|SSLKeyException|SSLParameters|SSLPeerUnverifiedException|SSLPermission|SSLProtocolException|SslRMIClientSocketFactory|SslRMIServerSocketFactory|SSLServerSocket|SSLServerSocketFactory|SSLSession|SSLSessionBindingEvent|SSLSessionBindingListener|SSLSessionContext|SSLSocket|SSLSocketFactory|Stack|StackOverflowError|StackTraceElement|StampedLock|StandardCharsets|StandardConstants|StandardCopyOption|StandardEmitterMBean|StandardJavaFileManager|StandardLocation|StandardMBean|StandardOpenOption|StandardProtocolFamily|StandardSocketOptions|StandardWatchEventKinds|StartDocument|StartElement|StartTlsRequest|StartTlsResponse|State|State|StateEdit|StateEditable|StateFactory|Statement|Statement|StatementEvent|StatementEventListener|StAXResult|StAXSource|Stream|Stream.Builder|Streamable|StreamableValue|StreamCorruptedException|StreamFilter|StreamHandler|StreamPrintService|StreamPrintServiceFactory|StreamReaderDelegate|StreamResult|StreamSource|StreamSupport|StreamTokenizer|StrictMath|String|StringBuffer|StringBufferInputStream|StringBuilder|StringCharacterIterator|StringContent|StringHolder|StringIndexOutOfBoundsException|StringJoiner|StringMonitor|StringMonitorMBean|StringNameHelper|StringReader|StringRefAddr|StringSelection|StringSeqHelper|StringSeqHolder|StringTokenizer|StringValueExp|StringValueHelper|StringWriter|Stroke|StrokeBorder|Struct|StructMember|StructMemberHelper|Stub|StubDelegate|StubNotFoundException|Style|StyleConstants|StyleConstants.CharacterConstants|StyleConstants.ColorConstants|StyleConstants.FontConstants|StyleConstants.ParagraphConstants|StyleContext|StyledDocument|StyledEditorKit|StyledEditorKit.AlignmentAction|StyledEditorKit.BoldAction|StyledEditorKit.FontFamilyAction|StyledEditorKit.FontSizeAction|StyledEditorKit.ForegroundAction|StyledEditorKit.ItalicAction|StyledEditorKit.StyledTextAction|StyledEditorKit.UnderlineAction|StyleSheet|StyleSheet.BoxPainter|StyleSheet.ListPainter|Subject|SubjectDelegationPermission|SubjectDomainCombiner|SUCCESSFUL|Supplier|SupportedAnnotationTypes|SupportedOptions|SupportedSourceVersion|SupportedValuesAttribute|SuppressWarnings|SwingConstants|SwingPropertyChangeSupport|SwingUtilities|SwingWorker|SwingWorker.StateValue|SwitchPoint|SYNC_WITH_TRANSPORT|SyncFactory|SyncFactoryException|SyncFailedException|SynchronousQueue|SyncProvider|SyncProviderException|SyncResolver|SyncScopeHelper|SynthButtonUI|SynthCheckBoxMenuItemUI|SynthCheckBoxUI|SynthColorChooserUI|SynthComboBoxUI|SynthConstants|SynthContext|SynthDesktopIconUI|SynthDesktopPaneUI|SynthEditorPaneUI|Synthesizer|SynthFormattedTextFieldUI|SynthGraphicsUtils|SynthInternalFrameUI|SynthLabelUI|SynthListUI|SynthLookAndFeel|SynthMenuBarUI|SynthMenuItemUI|SynthMenuUI|SynthOptionPaneUI|SynthPainter|SynthPanelUI|SynthPasswordFieldUI|SynthPopupMenuUI|SynthProgressBarUI|SynthRadioButtonMenuItemUI|SynthRadioButtonUI|SynthRootPaneUI|SynthScrollBarUI|SynthScrollPaneUI|SynthSeparatorUI|SynthSliderUI|SynthSpinnerUI|SynthSplitPaneUI|SynthStyle|SynthStyleFactory|SynthTabbedPaneUI|SynthTableHeaderUI|SynthTableUI|SynthTextAreaUI|SynthTextFieldUI|SynthTextPaneUI|SynthToggleButtonUI|SynthToolBarUI|SynthToolTipUI|SynthTreeUI|SynthUI|SynthViewportUI|SysexMessage|System|SYSTEM_EXCEPTION|SystemColor|SystemException|SystemFlavorMap|SystemTray)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(TabableView|TabbedPaneUI|TabExpander|TableCellEditor|TableCellRenderer|TableColumn|TableColumnModel|TableColumnModelEvent|TableColumnModelListener|TableHeaderUI|TableModel|TableModelEvent|TableModelListener|TableRowSorter|TableStringConverter|TableUI|TableView|TabSet|TabStop|TabularData|TabularDataSupport|TabularType|TAG_ALTERNATE_IIOP_ADDRESS|TAG_CODE_SETS|TAG_INTERNET_IOP|TAG_JAVA_CODEBASE|TAG_MULTIPLE_COMPONENTS|TAG_ORB_TYPE|TAG_POLICIES|TAG_RMI_CUSTOM_MAX_STREAM_FORMAT|TagElement|TaggedComponent|TaggedComponentHelper|TaggedComponentHolder|TaggedProfile|TaggedProfileHelper|TaggedProfileHolder|Target|TargetDataLine|TargetedNotification|TCKind|Templates|TemplatesHandler|Temporal|TemporalAccessor|TemporalAdjuster|TemporalAdjusters|TemporalAmount|TemporalField|TemporalQueries|TemporalQuery|TemporalUnit|Text|Text|TextAction|TextArea|TextAttribute|TextComponent|TextEvent|TextField|TextHitInfo|TextInputCallback|TextLayout|TextLayout.CaretPolicy|TextListener|TextMeasurer|TextOutputCallback|TextStyle|TextSyntax|TextUI|TexturePaint|ThaiBuddhistChronology|ThaiBuddhistDate|ThaiBuddhistEra|Thread|Thread.State|Thread.UncaughtExceptionHandler|THREAD_POLICY_ID|ThreadDeath|ThreadFactory|ThreadGroup|ThreadInfo|ThreadLocal|ThreadLocalRandom|ThreadMXBean|ThreadPolicy|ThreadPolicyOperations|ThreadPolicyValue|ThreadPoolExecutor|ThreadPoolExecutor.AbortPolicy|ThreadPoolExecutor.CallerRunsPolicy|ThreadPoolExecutor.DiscardOldestPolicy|ThreadPoolExecutor.DiscardPolicy|Throwable|Tie|TileObserver|Time|TimeLimitExceededException|TIMEOUT|TimeoutException|Timer|Timer|Timer|TimerMBean|TimerNotification|TimerTask|Timestamp|Timestamp|TimeUnit|TimeZone|TimeZoneNameProvider|TitledBorder|ToDoubleBiFunction|ToDoubleFunction|ToIntBiFunction|ToIntFunction|ToLongBiFunction|ToLongFunction|Tool|ToolBarUI|Toolkit|ToolProvider|ToolTipManager|ToolTipUI|TooManyListenersException|Track|TRANSACTION_MODE|TRANSACTION_REQUIRED|TRANSACTION_ROLLEDBACK|TRANSACTION_UNAVAILABLE|TransactionalWriter|TransactionRequiredException|TransactionRolledbackException|TransactionService|Transferable|TransferHandler|TransferHandler.DropLocation|TransferHandler.TransferSupport|TransferQueue|Transform|TransformAttribute|Transformer|TransformerConfigurationException|TransformerException|TransformerFactory|TransformerFactoryConfigurationError|TransformerHandler|TransformException|TransformParameterSpec|TransformService|Transient|TRANSIENT|Transmitter|Transparency|TRANSPORT_RETRY|TrayIcon|TrayIcon.MessageType|TreeCellEditor|TreeCellRenderer|TreeExpansionEvent|TreeExpansionListener|TreeMap|TreeModel|TreeModelEvent|TreeModelListener|TreeNode|TreePath|TreeSelectionEvent|TreeSelectionListener|TreeSelectionModel|TreeSet|TreeUI|TreeWillExpandListener|TrustAnchor|TrustManager|TrustManagerFactory|TrustManagerFactorySpi|Type|TypeCode|TypeCodeHolder|TypeConstraintException|TypeElement|TypeInfo|TypeInfoProvider|TypeKind|TypeKindVisitor6|TypeKindVisitor7|TypeKindVisitor8|TypeMirror|TypeMismatch|TypeMismatch|TypeMismatch|TypeMismatchHelper|TypeMismatchHelper|TypeNotPresentException|TypeParameterElement|Types|Types|TypeVariable|TypeVariable|TypeVisitor|UID|UIDefaults|UIDefaults.ActiveValue|UIDefaults.LazyInputMap|UIDefaults.LazyValue|UIDefaults.ProxyLazyValue|UIEvent|UIManager|UIManager.LookAndFeelInfo|UIResource|ULongLongSeqHelper|ULongLongSeqHolder|ULongSeqHelper|ULongSeqHolder|UnaryOperator|UncheckedIOException|UndeclaredThrowableException|UndoableEdit|UndoableEditEvent|UndoableEditListener|UndoableEditSupport|UndoManager|UnexpectedException|UnicastRemoteObject|UnionMember|UnionMemberHelper|UnionType|UNKNOWN|UNKNOWN|UnknownAnnotationValueException|UnknownElementException|UnknownEncoding|UnknownEncodingHelper|UnknownEntityException|UnknownError|UnknownException|UnknownFormatConversionException|UnknownFormatFlagsException|UnknownGroupException|UnknownHostException|UnknownHostException|UnknownObjectException|UnknownServiceException|UnknownTypeException|UnknownUserException|UnknownUserExceptionHelper|UnknownUserExceptionHolder|UnmappableCharacterException|UnmarshalException|UnmarshalException|Unmarshaller|Unmarshaller.Listener|UnmarshallerHandler|UnmodifiableClassException|UnmodifiableSetException|UnrecoverableEntryException|UnrecoverableKeyException|Unreferenced|UnresolvedAddressException|UnresolvedPermission|UnsatisfiedLinkError|UnsolicitedNotification|UnsolicitedNotificationEvent|UnsolicitedNotificationListener|UNSUPPORTED_POLICY|UNSUPPORTED_POLICY_VALUE|UnsupportedAddressTypeException|UnsupportedAudioFileException|UnsupportedCallbackException|UnsupportedCharsetException|UnsupportedClassVersionError|UnsupportedDataTypeException|UnsupportedEncodingException|UnsupportedFlavorException|UnsupportedLookAndFeelException|UnsupportedOperationException|UnsupportedTemporalTypeException|URI|URIDereferencer|URIException|URIParameter|URIReference|URIReferenceException|URIResolver|URISyntax|URISyntaxException|URL|URLClassLoader|URLConnection|URLDataSource|URLDecoder|URLEncoder|URLPermission|URLStreamHandler|URLStreamHandlerFactory|URLStringHelper|USER_EXCEPTION|UserDataHandler|UserDefinedFileAttributeView|UserException|UserPrincipal|UserPrincipalLookupService|UserPrincipalNotFoundException|UShortSeqHelper|UShortSeqHolder|UTFDataFormatException|Util|UtilDelegate|Utilities|UUID)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+
+        rule.pattern.setPattern ("\\b(ValidationEvent|ValidationEventCollector|ValidationEventHandler|ValidationEventImpl|ValidationEventLocator|ValidationEventLocatorImpl|ValidationException|Validator|Validator|ValidatorHandler|ValueBase|ValueBaseHelper|ValueBaseHolder|ValueExp|ValueFactory|ValueHandler|ValueHandlerMultiFormat|ValueInputStream|ValueMember|ValueMemberHelper|ValueOutputStream|ValueRange|VariableElement|VariableHeightLayoutCache|Vector|VerifyError|VersionSpecHelper|VetoableChangeListener|VetoableChangeListenerProxy|VetoableChangeSupport|View|ViewFactory|ViewportLayout|ViewportUI|VirtualMachineError|Visibility|VisibilityHelper|VM_ABSTRACT|VM_CUSTOM|VM_NONE|VM_TRUNCATABLE|VMID|VoiceStatus|Void|VolatileCallSite|VolatileImage|W3CDomHandler|W3CEndpointReference|W3CEndpointReferenceBuilder|Watchable|WatchEvent|WatchEvent.Kind|WatchEvent.Modifier|WatchKey|WatchService|WCharSeqHelper|WCharSeqHolder|WeakHashMap|WeakReference|WebEndpoint|WebFault|WebMethod|WebParam|WebParam.Mode|WebResult|WebRowSet|WebService|WebServiceClient|WebServiceContext|WebServiceException|WebServiceFeature|WebServiceFeatureAnnotation|WebServicePermission|WebServiceProvider|WebServiceRef|WebServiceRefs|WeekFields|WildcardType|WildcardType|Window|Window.Type|WindowAdapter|WindowConstants|WindowEvent|WindowFocusListener|WindowListener|WindowStateListener|WrappedPlainView|Wrapper|WritableByteChannel|WritableRaster|WritableRenderedImage|WriteAbortedException|WritePendingException|Writer|WrongAdapter|WrongAdapterHelper|WrongMethodTypeException|WrongPolicy|WrongPolicyHelper|WrongTransaction|WrongTransactionHelper|WrongTransactionHolder|WStringSeqHelper|WStringSeqHolder|WStringValueHelper|X500Principal|X500PrivateCredential|X509Certificate|X509Certificate|X509CertSelector|X509CRL|X509CRLEntry|X509CRLSelector|X509Data|X509EncodedKeySpec|X509ExtendedKeyManager|X509ExtendedTrustManager|X509Extension|X509IssuerSerial|X509KeyManager|X509TrustManager|XAConnection|XADataSource|XAException|XAResource|Xid|XmlAccessOrder|XmlAccessorOrder|XmlAccessorType|XmlAccessType|XmlAdapter|XmlAnyAttribute|XmlAnyElement|XmlAttachmentRef|XmlAttribute|XMLConstants|XMLCryptoContext|XMLDecoder|XmlElement|XmlElement.DEFAULT|XmlElementDecl|XmlElementDecl.GLOBAL|XmlElementRef|XmlElementRef.DEFAULT|XmlElementRefs|XmlElements|XmlElementWrapper|XMLEncoder|XmlEnum|XmlEnumValue|XMLEvent|XMLEventAllocator|XMLEventConsumer|XMLEventFactory|XMLEventReader|XMLEventWriter|XMLFilter|XMLFilterImpl|XMLFormatter|XMLGregorianCalendar|XmlID|XmlIDREF|XmlInlineBinaryData|XMLInputFactory|XmlJavaTypeAdapter|XmlJavaTypeAdapter.DEFAULT|XmlJavaTypeAdapters|XmlList|XmlMimeType|XmlMixed|XmlNs|XmlNsForm|XMLObject|XMLOutputFactory|XMLParseException|XmlReader|XMLReader|XMLReaderAdapter|XMLReaderFactory|XmlRegistry|XMLReporter|XMLResolver|XmlRootElement|XmlSchema|XmlSchemaType|XmlSchemaType.DEFAULT|XmlSchemaTypes|XmlSeeAlso|XMLSignature|XMLSignature.SignatureValue|XMLSignatureException|XMLSignatureFactory|XMLSignContext|XMLStreamConstants|XMLStreamException|XMLStreamReader|XMLStreamWriter|XMLStructure|XmlTransient|XmlType|XmlType.DEFAULT|XMLValidateContext|XmlValue|XmlWriter|XPath|XPathConstants|XPathException|XPathExpression|XPathExpressionException|XPathFactory|XPathFactoryConfigurationException|XPathFilter2ParameterSpec|XPathFilterParameterSpec|XPathFunction|XPathFunctionException|XPathFunctionResolver|XPathType|XPathType.Filter|XPathVariableResolver|XSLTTransformParameterSpec|Year|YearMonth|ZipEntry|ZipError|ZipException|ZipFile|ZipInputStream|ZipOutputStream|ZonedDateTime|ZoneId|ZoneOffset|ZoneOffsetTransition|ZoneOffsetTransitionRule|ZoneOffsetTransitionRule.TimeDefinition|ZoneRules|ZoneRulesException|ZoneRulesProvider|ZoneView|_BindingIteratorImplBase|_BindingIteratorStub|_DynAnyFactoryStub|_DynAnyStub|_DynArrayStub|_DynEnumStub|_DynFixedStub|_DynSequenceStub|_DynStructStub|_DynUnionStub|_DynValueStub|_IDLTypeStub|_NamingContextExtStub|_NamingContextImplBase|_NamingContextStub|_PolicyStub|_Remote_Stub|_ServantActivatorStub|_ServantLocatorStub)(?!(@|#|\\$))\\b");
+        rule.format = javaFormat;
+        highlightingRules.append (rule);
+    }
+    else if (progLan == "json")
+    {
+        quoteFormat.setFontWeight (QFont::Bold);
+        errorFormat.setForeground (Red);
+        errorFormat.setFontUnderline (true);
+    }
+
+    if (showWhiteSpace)
+    {
+        rule.pattern.setPattern ("\\s+");
+        rule.format = whiteSpaceFormat;
+        highlightingRules.append (rule);
+    }
+
+    /************
+     * Comments *
+     ************/
+
+    /* single line comments */
+    rule.pattern.setPattern (QString());
+    if (progLan == "c" || progLan == "cpp"
+        || Lang == "javascript" || progLan == "qml"
+        || progLan == "scss" || progLan == "dart"
+        || progLan == "go" || progLan == "java")
+    {
+        rule.pattern.setPattern ("//.*"); // why had I set it to ("//(?!\\*).*")?
+    }
+    else if (progLan == "php")
+    {
+        rule.pattern.setPattern ("(//|#).*");
+    }
+    else if (progLan == "python"
+             || progLan == "qmake"
+             || progLan == "gtkrc")
+    {
+        rule.pattern.setPattern ("#.*"); // or "#[^\n]*"
+    }
+    else if (progLan == "desktop" || progLan == "config" || progLan == "theme")
+    {
+        rule.pattern.setPattern ("^\\s*#.*"); // only at start
+    }
+    /*else if (progLan == "deb")
+    {
+        rule.pattern.setPattern ("^#[^\\s:]+:(?=\\s*)");
+    }*/
+    else if (progLan == "m3u")
+    {
+        rule.pattern.setPattern ("^\\s+#|^#(?!(EXTM3U|EXTINF))");
+    }
+    else if (progLan == "lua")
+        rule.pattern.setPattern ("--(?!\\[).*");
+    else if (progLan == "troff")
+        rule.pattern.setPattern ("\\\\\"|\\\\#|\\.\\s*\\\\\"");
+    else if (progLan == "LaTeX")
+        rule.pattern.setPattern ("%.*");
+    if (!rule.pattern.pattern().isEmpty())
+    {
+        rule.format = commentFormat;
+        highlightingRules.append (rule);
+    }
+
+    /* multiline comments */
+    if (progLan == "c" || progLan == "cpp"
+        || progLan == "javascript" || progLan == "qml"
+        || progLan == "php" || progLan == "css" || progLan == "scss"
+        || progLan == "fountain" || progLan == "dart"
+        || progLan == "go" || progLan == "java")
+    {
+        commentStartExpression.setPattern ("/\\*");
+        commentEndExpression.setPattern ("\\*/");
+    }
+    else if (progLan == "lua")
+    {
+        commentStartExpression.setPattern ("\\[\\[|--\\[\\[");
+        commentEndExpression.setPattern ("\\]\\]");
+    }
+    else if (progLan == "python")
+    {
+        commentStartExpression.setPattern ("\"\"\"|\'\'\'");
+        commentEndExpression = commentStartExpression;
+    }
+    else if (progLan == "xml")
+    {
+        commentStartExpression.setPattern ("<!--");
+        commentEndExpression.setPattern ("-->");
+    }
+    else if (progLan == "html")
+    {
+        errorFormat.setForeground (Red);
+        errorFormat.setFontUnderline (true);
+
+        htmlCommetStart.setPattern ("<!--");
+        htmlCommetEnd.setPattern ("-->");
+
+        /* CSS and JS inside HTML (see htmlCSSHighlighter and htmlJavascript) */
+        htmlSubcommetStart.setPattern ("/\\*");
+        htmlSubcommetEnd.setPattern ("\\*/");
+
+        commentStartExpression = htmlCommetStart;
+        commentEndExpression = htmlCommetEnd;
+    }
+    else if (progLan == "perl")
+    {
+        commentStartExpression.setPattern ("^=[A-Za-z0-9_]+($|\\s+)");
+        commentEndExpression.setPattern ("^=cut.*");
+    }
+    else if (progLan == "ruby")
+    {
+        commentStartExpression.setPattern ("=begin\\s*$");
+        commentEndExpression.setPattern ("^=end\\s*$");
+    }
+    else if (progLan == "markdown")
+    {
+        quoteFormat.setForeground (DarkRed); // not a quote but a code block
+        urlInsideQuoteFormat.setForeground (DarkRed);
+        commentStartExpression.setPattern ("<!--");
+        commentEndExpression.setPattern ("-->");
+    }
+}
+/*************************/
+Highlighter::~Highlighter()
+{
+    if (QTextDocument *doc = document())
+    {
+        QTextOption opt =  doc->defaultTextOption();
+        opt.setFlags (opt.flags() & ~QTextOption::ShowTabsAndSpaces
+                                  & ~QTextOption::ShowLineAndParagraphSeparators
+                                  & ~QTextOption::AddSpaceForLineAndParagraphSeparators
+                                  & ~QTextOption::ShowDocumentTerminator);
+        doc->setDefaultTextOption (opt);
+    }
+}
+/*************************/
+// Should be used only with characters that can be escaped in a language.
+bool Highlighter::isEscapedChar (const QString &text, const int pos) const
+{
+    if (pos < 1) return false;
+    int i = 0;
+    while (pos - i - 1 >= 0 && text.at (pos - i - 1) == '\\')
+        ++i;
+    if (i % 2 != 0)
+        return true;
+    return false;
+}
+/*************************/
+// Checks if a start quote is inside a Yaml key (as in ab""c).
+bool Highlighter::isYamlKeyQuote (const QString &key, const int pos)
+{
+    static int lastKeyQuote = -1;
+    int indx = pos;
+    if (indx > 0 && indx < key.length())
+    {
+        while (indx > 0 && key.at (indx - 1).isSpace())
+            --indx;
+        if (indx > 0)
+        {
+            QChar c = key.at (indx - 1);
+            if (c != '\"' && c != '\'')
+            {
+                lastKeyQuote = pos;
+                return true;
+            }
+            if (lastKeyQuote == indx - 1)
+            {
+                lastKeyQuote = pos;
+                return true;
+            }
+        }
+    }
+    lastKeyQuote = -1;
+    return false;
+}
+/*************************/
+// Check if a start or end quotation mark (positioned at "pos") is escaped.
+// If "skipCommandSign" is true (only for SH), start double quotes are escaped before "$(".
+bool Highlighter::isEscapedQuote (const QString &text, const int pos, bool isStartQuote,
+                                  bool skipCommandSign)
+{
+    if (pos < 0) return false;
+
+    if (progLan == "html" || progLan == "xml")
+        return false;
+
+    /* with markdown, something should be inside quotes */
+    if (progLan == "markdown" && isStartQuote
+        && (pos >= text.length() - 1 || text.at (pos + 1) == '`'))
+    {
+        return true;
+    }
+
+    if (progLan == "yaml")
+    {
+        if (isStartQuote)
+        {
+            if (format (pos) == codeBlockFormat) // inside a literal block
+                return true;
+            QRegularExpressionMatch match;
+            if (text.indexOf (QRegularExpression ("^(\\s*-\\s)+\\s*"), 0, &match) == 0)
+            {
+                if (match.capturedLength() == pos)
+                    return false; // a start quote isn't escaped at the beginning of a list
+            }
+            /* Skip the start quote if it's inside a key or value.
+               NOTE: In keys, "(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*" is used instead of "[^{\\[:,#]*"
+                     because ":" should be followed by a space to make a key-value. */
+            if (format (pos) == neutralFormat)
+            { // inside preformatted braces, when multiLineQuote() is called (not needed; repeated below)
+                int index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
+                if (index > -1 && index <= pos && index + match.capturedLength() > pos
+                    && isYamlKeyQuote (match.captured(), pos - index))
+                {
+                    return true;
+                }
+                index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)[^:#]*:\\s+\\K[^{\\[,#\\s][^,#]*"), pos, &match);
+                if (index > -1 && index < pos && index + match.capturedLength() > pos)
+                    return true;
+            }
+            else
+            {
+                /* inside braces before preformatting (indirectly used by yamlOpenBraces()) */
+                int index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
+                if (index > -1 && index <= pos && index + match.capturedLength() > pos
+                    && isYamlKeyQuote (match.captured(), pos - index))
+                {
+                    return true;
+                }
+                index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)[^:#]*:\\s+\\K[^{\\[,#\\s][^,#]*"), pos, &match);
+                if (index > -1 && index < pos && index + match.capturedLength() > pos)
+                    return true;
+                /* outside braces */
+                index = text.lastIndexOf (QRegularExpression ("^\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
+                if (index > -1 && index < pos && index + match.capturedLength() > pos
+                    && isYamlKeyQuote (match.captured(), pos - index))
+                {
+                    return true;
+                }
+                index = text.lastIndexOf (QRegularExpression ("^[^:#]*:\\s+\\K[^\\[\\s#].*"), pos, &match);
+                if (index > -1 && index < pos && index + match.capturedLength() > pos)
+                    return true;
+            }
+        }
+        else if (text.length() > pos && text.at (pos) == '\'')
+        { // a pair of single quotes means escaping them
+            static int lastEscapedQuote = -1;
+            if (lastEscapedQuote == pos && pos > 0 && text.at (pos - 1) == '\'') // the second quote
+                return true;
+            if ((pos == 0 || text.at (pos - 1) != '\'' || lastEscapedQuote == pos - 1)
+                && text.length() > pos + 1 && text.at (pos + 1) == '\'')
+            { // the first quote
+                lastEscapedQuote = pos + 1;
+                return true;
+            }
+            lastEscapedQuote = -1;
+        }
+    }
+    else if (progLan == "go")
+    {
+        if (text.at (pos) == '`')
+            return false;
+        if (isStartQuote)
+        {
+            if (text.at (pos) == '\"'
+                && pos > 0 && pos < text.length() - 1
+                && text.at (pos + 1) == '\''
+                && (text.at (pos - 1) == '\''
+                    || (pos > 1 && text.at (pos - 2) == '\'' && text.at (pos - 1) == '\\')))
+            {
+                return true; // '"' or '\"'
+            }
+            else
+                return false;
+        }
+        return isEscapedChar (text, pos);
+    }
+
+    /* there's no need to check for quote marks because this function is used only with them */
+    /*if (progLan == "perl"
+        && pos != text.indexOf (quoteMark, pos)
+        && pos != text.indexOf ("\'", pos)
+        && pos != text.indexOf ("`", pos))
+    {
+        return false;
+    }
+    if (pos != text.indexOf (quoteMark, pos)
+        && (progLan == "markdown" || pos != text.indexOf (QRegularExpression ("\'"), pos)))
+    {
+        return false;
+    }*/
+
+    /* check if the quote surrounds a here-doc delimiter */
+    if ((currentBlockState() >= endState || currentBlockState() < -1)
+        && currentBlockState() % 2 == 0)
+    {
+        QRegularExpressionMatch match;
+        QRegularExpression delimPart (progLan == "ruby" ? "<<(-|~){0,1}" : "<<\\s*");
+        if (text.lastIndexOf (delimPart, pos, &match) == pos - match.capturedLength())
+            return true; // escaped start quote
+        if (progLan == "perl") // space is allowed
+            delimPart.setPattern ("<<(?:\\s*)(\'[A-Za-z0-9_\\s]+)|<<(?:\\s*)(\"[A-Za-z0-9_\\s]+)|<<(?:\\s*)(`[A-Za-z0-9_\\s]+)");
+        else if (progLan == "ruby")
+            delimPart.setPattern ("<<(?:-|~){0,1}(\'[A-Za-z0-9]+)|<<(?:-|~){0,1}(\"[A-Za-z0-9]+)");
+        else
+            delimPart.setPattern ("<<(?:\\s*)(\'[A-Za-z0-9_]+)|<<(?:\\s*)(\"[A-Za-z0-9_]+)");
+        if (text.lastIndexOf (delimPart, pos, &match) == pos - match.capturedLength())
+            return true; // escaped end quote
+    }
+
+    /* escaped start quotes are just for Bash, Perl, markdown and yaml */
+    if (isStartQuote)
+    {
+        if (progLan == "perl")
+        {
+            if (pos >= 1)
+            {
+                if (text.at (pos - 1) == '$') // in Perl, $' has a (deprecated?) meaning
+                    return true;
+                if (text.at (pos) == '\'')
+                {
+                    if (text.at (pos - 1) == '&')
+                        return true;
+                    int index = pos - 1;
+                    while (index >= 0 && (text.at (index).isLetterOrNumber() || text.at (index) == '_'))
+                        -- index;
+                    if (index >= 0 && (text.at (index) == '$' || text.at (index) == '@'
+                                       || text.at (index) == '%' || text.at (index) == '*'
+                                       /*|| text.at (index) == '!'*/))
+                    {
+                        return true;
+                    }
+                }
+            }
+            return false; // no other case of escaping at the start
+        }
+        else if (progLan != "sh" && progLan != "makefile" && progLan != "cmake"
+                 && progLan != "markdown" && progLan != "yaml")
+        {
+            return false;
+        }
+    }
+
+    if (isStartQuote && skipCommandSign && text.at (pos) == quoteMark.pattern().at (0)
+        && text.indexOf (QRegularExpression ("[^\"]*\\$\\("), pos) == pos + 1)
+    {
+        return true;
+    }
+
+    int i = 0;
+    while (pos - i > 0 && text.at (pos - i - 1) == '\\')
+        ++i;
+    /* only an odd number of backslashes means that the quote is escaped */
+    if (
+        i % 2 != 0
+        && ((progLan == "yaml"
+             && text.at (pos) == quoteMark.pattern().at (0))
+            /* for these languages, both single and double quotes can be escaped (also for perl?) */
+            || progLan == "c" || progLan == "cpp"
+            || progLan == "javascript" || progLan == "qml"
+            || progLan == "python"
+            || progLan == "perl"
+            || progLan == "dart"
+            || progLan == "php"
+            || progLan == "ruby"
+            || progLan == "lua"
+            /* markdown is an exception */
+            || progLan == "markdown"
+            /* however, in Bash, single quote can be escaped only at start */
+            || ((progLan == "sh" || progLan == "makefile" || progLan == "cmake")
+                && (isStartQuote || text.at (pos) == quoteMark.pattern().at (0))))
+       )
+    {
+        return true;
+    }
+
+    if (progLan == "ruby" && text.at (pos) == quoteMark.pattern().at (0))
+    { // a minimal support for command substitution "#{...}"
+        QRegularExpressionMatch match;
+        int index = text.lastIndexOf (QRegularExpression ("#\\{[^\\}]*"), pos, &match);
+        if (index > -1 && index < pos && index + match.capturedLength() > pos)
+            return true;
+    }
+
+    return false;
+}
+/*************************/
+// Checks if a character is inside quotation marks, considering the language
+// (should be used with care because it gives correct results only in special places).
+// If "skipCommandSign" is true (only for SH), start double quotes are escaped before "$(".
+bool Highlighter::isQuoted (const QString &text, const int index,
+                            bool skipCommandSign, const int start)
+{
+    if (progLan == "perl" || progLan == "ruby")
+        return isPerlQuoted (text, index);
+    if (progLan == "javascript" || progLan == "qml")
+        return isJSQuoted (text, index);
+
+    if (index < 0 || start < 0 || index < start)
+        return false;
+
+    int pos = start - 1;
+
+    bool res = false;
+    int N;
+    QRegularExpression quoteExpression;
+    if (mixedQuotes_)
+        quoteExpression = mixedQuoteMark;
+    else
+        quoteExpression = quoteMark;
+    if (pos == -1)
+    {
+        int prevState = previousBlockState();
+        if ((prevState < doubleQuoteState
+             || prevState > SH_MixedSingleQuoteState)
+                && prevState != htmlStyleSingleQuoteState
+                && prevState != htmlStyleDoubleQuoteState)
+        {
+            N = 0;
+        }
+        else
+        {
+            N = 1;
+            res = true;
+            if (mixedQuotes_)
+            {
+                if (prevState == doubleQuoteState
+                    || prevState == SH_DoubleQuoteState
+                    || prevState == SH_MixedDoubleQuoteState
+                    || prevState == htmlStyleDoubleQuoteState)
+                {
+                    quoteExpression = quoteMark;
+                    if (skipCommandSign)
+                    {
+                        if (text.indexOf (QRegularExpression ("[^\"]*\\$\\("), 0) == 0)
+                        {
+                            N = 0;
+                            res = false;
+                        }
+                        else
+                        {
+                            QTextBlock prevBlock = currentBlock().previous();
+                            if (prevBlock.isValid())
+                            {
+                                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                                {
+                                    int N = prevData->openNests();
+                                    if (N > 0 && (prevState == doubleQuoteState || !prevData->openQuotes().contains (N)))
+                                    {
+                                        N = 0;
+                                        res = false;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+                else
+                    quoteExpression = singleQuoteMark;
+            }
+        }
+    }
+    else N = 0; // a new search from the last position
+
+    int nxtPos;
+    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
+    {
+        /* skip formatted comments */
+        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat)
+        {
+            pos = nxtPos;
+            continue;
+        }
+
+        ++N;
+        if ((N % 2 == 0 // an escaped end quote...
+             && isEscapedQuote (text, nxtPos, false))
+            || (N % 2 != 0 // ... or an escaped start quote Bash...
+                && (isEscapedQuote (text, nxtPos, true, skipCommandSign)
+                    /*|| isInsideRegex (text, nxtPos)*/))) // ... or a start quote inside regex
+        {
+            --N;
+            pos = nxtPos;
+            continue;
+        }
+
+        if (index < nxtPos)
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        /* "pos" might be negative next time */
+        if (N % 2 == 0) res = false;
+        else res = true;
+
+        if (mixedQuotes_)
+        {
+            if (N % 2 != 0)
+            { // each quote neutralizes the other until it's closed
+                if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                    quoteExpression = quoteMark;
+                else
+                    quoteExpression = singleQuoteMark;
+            }
+            else
+                quoteExpression = mixedQuoteMark;
+        }
+        pos = nxtPos;
+    }
+
+    return res;
+}
+/*************************/
+// Perl has a separate method to support backquotes.
+// Also see multiLinePerlQuote().
+bool Highlighter::isPerlQuoted (const QString &text, const int index)
+{
+    if (index < 0) return false;
+
+    int pos = -1;
+
+    if (format (index) == quoteFormat || format (index) == altQuoteFormat)
+        return true;
+    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+    {
+        pos = data->lastFormattedQuote() - 1;
+        if (index <= pos) return false;
+    }
+
+    bool res = false;
+    int N;
+    QRegularExpression quoteExpression = mixedQuoteBackquote;
+    if (pos == -1)
+    {
+        int prevState = previousBlockState();
+        if (prevState != doubleQuoteState && prevState != singleQuoteState)
+            N = 0;
+        else
+        {
+            N = 1;
+            res = true;
+            if (prevState == doubleQuoteState)
+                quoteExpression = quoteMark;
+            else
+            {
+                bool backquoted (false);
+                QTextBlock prevBlock = currentBlock().previous();
+                if (prevBlock.isValid())
+                {
+                    TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
+                    if (prevData && prevData->getProperty())
+                        backquoted = true;
+                }
+                if (backquoted)
+                    quoteExpression = backQuote;
+                else
+                    quoteExpression = singleQuoteMark;
+            }
+        }
+    }
+    else N = 0; // a new search from the last position
+
+    int nxtPos;
+    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
+    {
+        /* skip formatted comments */
+        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat
+            || (N % 2 == 0 && isMLCommented (text, nxtPos, commentState)))
+        {
+            pos = nxtPos;
+            continue;
+        }
+
+        ++N;
+        if ((N % 2 == 0 // an escaped end quote...
+             && isEscapedQuote (text, nxtPos, false))
+            || (N % 2 != 0 // ... or an escaped start quote
+                && (isEscapedQuote (text, nxtPos, true, false) || isInsideRegex (text, nxtPos))))
+        {
+            if (res)
+            { // -> isEscapedRegex()
+                pos = qMax (pos, 0);
+                if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                    setFormat (pos, nxtPos - pos + 1, quoteFormat);
+                else
+                    setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
+            }
+            --N;
+            pos = nxtPos;
+            continue;
+        }
+
+        if (N % 2 == 0)
+        { // -> isEscapedRegex()
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                data->insertLastFormattedQuote (nxtPos + 1);
+            pos = qMax (pos, 0);
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                setFormat (pos, nxtPos - pos + 1, quoteFormat);
+            else
+                setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
+        }
+
+        if (index < nxtPos)
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        /* "pos" might be negative next time */
+        if (N % 2 == 0) res = false;
+        else res = true;
+
+        if (N % 2 != 0)
+        { // each quote neutralizes the other until it's closed
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                quoteExpression = quoteMark;
+            else if (text.at (nxtPos) == '\'')
+                quoteExpression = singleQuoteMark;
+            else
+                quoteExpression = backQuote;
+        }
+        else
+            quoteExpression = mixedQuoteBackquote;
+        pos = nxtPos;
+    }
+
+    return res;
+}
+/*************************/
+// JS has a separate method to support backquotes (template literals).
+// Also see multiLineJSlQuote().
+bool Highlighter::isJSQuoted (const QString &text, const int index)
+{
+    if (index < 0) return false;
+
+    int pos = -1;
+
+    /* with regex, the text will be formatted below to know whether
+       the regex start sign is quoted (-> isEscapedRegex) */
+    if (format (index) == quoteFormat || format (index) == altQuoteFormat)
+        return true;
+    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+    {
+        pos = data->lastFormattedQuote() - 1;
+        if (index <= pos) return false;
+    }
+
+    bool res = false;
+    int N;
+    QRegularExpression quoteExpression = mixedQuoteBackquote;
+    if (pos == -1)
+    {
+        int prevState = previousBlockState();
+        if (prevState != doubleQuoteState
+            && prevState != singleQuoteState
+            && prevState != JS_templateLiteralState)
+        {
+            N = 0;
+        }
+        else
+        {
+            N = 1;
+            res = true;
+            if (prevState == doubleQuoteState)
+                quoteExpression = quoteMark;
+            else if (prevState == singleQuoteState)
+                quoteExpression = singleQuoteMark;
+            else
+                quoteExpression = backQuote;
+        }
+    }
+    else N = 0; // a new search from the last position
+
+    int nxtPos;
+    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
+    {
+        /* skip formatted comments */
+        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat
+            || (N % 2 == 0
+                && (isMLCommented (text, nxtPos, commentState)
+                    || isMLCommented (text, nxtPos, htmlJavaCommentState))))
+        {
+            pos = nxtPos;
+            continue;
+        }
+
+        ++N;
+        if ((N % 2 == 0 // an escaped end quote...
+             && isEscapedQuote (text, nxtPos, false))
+            || (N % 2 != 0 // ... or a start quote inside regex (JS has no escaped start quote)
+                && isInsideRegex (text, nxtPos)))
+        {
+            if (res)
+            { // -> isEscapedRegex()
+                pos = qMax (pos, 0);
+                if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                    setFormat (pos, nxtPos - pos + 1, quoteFormat);
+                else
+                    setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
+            }
+            --N;
+            pos = nxtPos;
+            continue;
+        }
+
+        if (N % 2 == 0)
+        { // -> isEscapedRegex()
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                data->insertLastFormattedQuote (nxtPos + 1);
+            pos = qMax (pos, 0);
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                setFormat (pos, nxtPos - pos + 1, quoteFormat);
+            else
+                setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
+        }
+
+        if (index < nxtPos)
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        /* "pos" might be negative next time */
+        if (N % 2 == 0) res = false;
+        else res = true;
+
+        if (N % 2 != 0)
+        { // each quote neutralizes the other until it's closed
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                quoteExpression = quoteMark;
+            else if (text.at (nxtPos) == '\'')
+                quoteExpression = singleQuoteMark;
+            else
+                quoteExpression = backQuote;
+        }
+        else
+            quoteExpression = mixedQuoteBackquote;
+        pos = nxtPos;
+    }
+
+    return res;
+}
+/*************************/
+// Checks if a start quote or a start single-line comment sign is inside a multiline comment.
+// If "start" > 0, it will be supposed that "start" is not inside a previous comment.
+// (May give an incorrect result with other characters and works only with real comments
+// whose state is "comState".)
+bool Highlighter::isMLCommented (const QString &text, const int index, int comState,
+                                 const int start)
+{
+    if (index < 0 || start < 0 || index < start
+        // commentEndExpression is always set if commentStartExpression is
+        || commentStartExpression.pattern().isEmpty())
+    {
+        return false;
+    }
+
+    /* not for Python */
+    if (progLan == "python") return false;
+
+    int prevState = previousBlockState();
+    if (prevState == nextLineCommentState)
+        return true; // see singleLineComment()
+
+    bool res = false;
+    int pos = start - 1;
+    int N;
+    QRegularExpressionMatch commentMatch;
+    QRegularExpression commentExpression;
+    if (pos >= 0 || prevState != comState)
+    {
+        N = 0;
+        commentExpression = commentStartExpression;
+    }
+    else
+    {
+        N = 1;
+        res = true;
+        commentExpression = commentEndExpression;
+    }
+
+    while ((pos = text.indexOf (commentExpression, pos + 1, &commentMatch)) >= 0)
+    {
+        /* skip formatted quotations and regex */
+        QTextCharFormat fi = format (pos);
+        if (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+            || fi == regexFormat) // see multiLineRegex() for the reason
+        {
+            continue;
+        }
+
+        ++N;
+
+        /* All (or most) multiline comments have more than one character
+           and this trick is needed for knowing if a double slash follows
+           an asterisk without using "lookbehind", for example. */
+        if (index < pos + (N % 2 == 0 ? commentMatch.capturedLength() : 0))
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        if (N % 2 != 0)
+        {
+            commentExpression = commentEndExpression;
+            res = true;
+        }
+        else
+        {
+            commentExpression = commentStartExpression;
+            res = false;
+        }
+    }
+
+    return res;
+}
+/*************************/
+// This handles multiline python comments separately because they aren't normal.
+// It comes after singleLineComment() and before multiLineQuote().
+void Highlighter::pythonMLComment (const QString &text, const int indx)
+{
+    if (progLan != "python") return;
+
+    /* we reset the block state because this method is also called
+       during the multiline quotation formatting after clearing formats */
+    setCurrentBlockState (-1);
+
+    int index = indx;
+    int quote;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if (prevState != pyDoubleQuoteState
+        && prevState != pySingleQuoteState)
+    {
+        index = text.indexOf (commentStartExpression, indx);
+
+        QTextCharFormat fi = format (index);
+        while ((index > 0 && isQuoted (text, index - 1)) // because two quotes may follow an end quote
+               || (index == 0 && (prevState == doubleQuoteState || prevState == singleQuoteState))
+               || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat) // not needed
+        {
+            index = text.indexOf (commentStartExpression, index + 3);
+            fi = format (index);
+        }
+        if (format (index) == commentFormat || format (index) == urlFormat)
+            return; // inside a single-line comment
+
+        /* if the comment start is found... */
+        if (index >= indx)
+        {
+            /* ... distinguish between double and single quotes */
+            if (index == text.indexOf (QRegularExpression ("\"\"\""), index))
+            {
+                commentStartExpression.setPattern ("\"\"\"");
+                quote = pyDoubleQuoteState;
+            }
+            else
+            {
+                commentStartExpression.setPattern ("\'\'\'");
+                quote = pySingleQuoteState;
+            }
+        }
+    }
+    else // but if we're inside a triple quotation...
+    {
+        /* ... distinguish between the two quote kinds
+           by checking the previous line */
+        quote = prevState;
+        if (quote == pyDoubleQuoteState)
+            commentStartExpression.setPattern ("\"\"\"");
+        else
+            commentStartExpression.setPattern ("\'\'\'");
+    }
+
+    while (index >= indx)
+    {
+        /* if the search is continued... */
+        if (commentStartExpression.pattern() == "\"\"\"|\'\'\'")
+        {
+            /* ... distinguish between double and single quotes
+               again because the quote mark may have changed... */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                commentStartExpression.setPattern ("\"\"\"");
+                quote = pyDoubleQuoteState;
+            }
+            else
+            {
+                commentStartExpression.setPattern ("\'\'\'");
+                quote = pySingleQuoteState;
+            }
+        }
+
+        /* search for the end quote from the start quote */
+        QRegularExpressionMatch startMatch;
+        int endIndex = text.indexOf (commentStartExpression, index + 3, &startMatch);
+
+        /* but if there's no start quote ... */
+        if (index == indx
+            && (prevState == pyDoubleQuoteState || prevState == pySingleQuoteState))
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (commentStartExpression, indx, &startMatch);
+        }
+
+        /* check if the quote is escaped */
+        while ((endIndex > 0 && text.at (endIndex - 1) == '\\'
+                /* backslash shouldn't be escaped itself */
+                && (endIndex < 2 || text.at (endIndex - 2) != '\\'))
+                   /* also consider ^' and ^" */
+                   || ((endIndex > 0 && text.at (endIndex - 1) == '^')
+                       && (endIndex < 2 || text.at (endIndex - 2) != '\\')))
+        {
+            endIndex = text.indexOf (commentStartExpression, endIndex + 3, &startMatch);
+        }
+
+        /* if there's a comment end ... */
+        if (endIndex >= 0)
+        {
+            /* ... clear the comment format from there to reformat
+               because a single-line comment may have changed now */
+            int badIndex = endIndex + startMatch.capturedLength();
+            if (format (badIndex) == commentFormat || format (badIndex) == urlFormat)
+                setFormat (badIndex, text.length() - badIndex, mainFormat);
+            singleLineComment (text, badIndex);
+        }
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (quote);
+            quoteLength = text.length() - index;
+        }
+        else
+            quoteLength = endIndex - index
+                          + startMatch.capturedLength(); // 3
+        setFormat (index, quoteLength, commentFormat);
+
+        /* format urls and email addresses inside the comment */
+        QString str = text.mid (index, quoteLength);
+        int pIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+        {
+            setFormat (pIndex + index, urlMatch.capturedLength(), urlFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+        /* format note patterns too */
+        pIndex = 0;
+        while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+        {
+            if (format (pIndex + index) != urlFormat)
+                setFormat (pIndex + index, urlMatch.capturedLength(), noteFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+
+        /* the next quote may be different */
+        commentStartExpression.setPattern ("\"\"\"|\'\'\'");
+        index = text.indexOf (commentStartExpression, index + quoteLength);
+        QTextCharFormat fi = format (index);
+        while ((index > 0 && isQuoted (text, index - 1))
+               || (index == 0 && (prevState == doubleQuoteState || prevState == singleQuoteState))
+               || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+        {
+            index = text.indexOf (commentStartExpression, index + 3);
+            fi = format (index);
+        }
+        if (format (index) == commentFormat || format (index) == urlFormat)
+            return;
+    }
+}
+/*************************/
+void Highlighter::singleLineComment (const QString &text, const int start)
+{
+    for (const HighlightingRule &rule : qAsConst (highlightingRules))
+    {
+        if (rule.format == commentFormat)
+        {
+            int startIndex = qMax (start, 0);
+            if (previousBlockState() == nextLineCommentState)
+                startIndex = 0;
+            else
+            {
+                startIndex = text.indexOf (rule.pattern, startIndex);
+                /* skip quoted comments (and, automatically, those inside multiline python comments) */
+                while (startIndex > -1
+                           /* check quote formats (only for multiLineComment()) */
+                       && (format (startIndex) == quoteFormat
+                           || format (startIndex) == altQuoteFormat
+                           || format (startIndex) == urlInsideQuoteFormat
+                           /* check whether the comment sign is quoted or inside regex */
+                           || isQuoted (text, startIndex, false, qMax (start, 0)) || isInsideRegex (text, startIndex)
+                           /* with troff and LaTeX, the comment sign may be escaped */
+                           || ((progLan == "troff" || progLan == "LaTeX")
+                               && isEscapedChar(text, startIndex))))
+                {
+                    startIndex = text.indexOf (rule.pattern, startIndex + 1);
+                }
+            }
+            if (startIndex > -1)
+            {
+                int l = text.length();
+                setFormat (startIndex, l - startIndex, commentFormat);
+
+                /* also format urls and email addresses inside the comment */
+                QString str = text.mid (startIndex, l - startIndex);
+                int pIndex = 0;
+                QRegularExpressionMatch urlMatch;
+                while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+                {
+                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+                    pIndex += urlMatch.capturedLength();
+                }
+                /* format note patterns too */
+                pIndex = 0;
+                while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+                {
+                    if (format (pIndex + startIndex) != urlFormat)
+                        setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+                    pIndex += urlMatch.capturedLength();
+                }
+
+                if (progLan == "javascript" || progLan == "qml")
+                {
+                    /* see NOTE of isEscapedRegex() and also the end of multiLineRegex() */
+                    setCurrentBlockState (regexExtraState);
+                }
+                else if ((progLan == "c" || progLan == "cpp")
+                         && text.endsWith (QLatin1Char('\\')))
+                {
+                    /* Take care of next-line comments with languages, for which
+                       no highlighting function is called after singleLineComment()
+                       and before the main formatting in highlightBlock()
+                       (only c and c++ for now). */
+                    setCurrentBlockState (nextLineCommentState);
+                }
+            }
+            break;
+        }
+    }
+}
+/*************************/
+bool Highlighter::multiLineComment (const QString &text,
+                                    const int index,
+                                    const QRegularExpression &commentStartExp, const QRegularExpression &commentEndExp,
+                                    const int commState,
+                                    const QTextCharFormat &comFormat)
+{
+    if (index < 0) return false;
+    int prevState = previousBlockState();
+    if (prevState == nextLineCommentState)
+        return false;  // was processed by singleLineComment()
+
+    /* CSS can have huge lines, which will take
+       a lot of CPU time if they're formatted completely. */
+    //bool hugeText = ((progLan == "css" || progLan == "scss" ) && text.length() > 50000);
+
+    bool rehighlightNextBlock = false;
+    int startIndex = index;
+
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+
+    if (startIndex > 0
+        || (prevState != commState
+            && prevState != commentInCssBlockState
+            && prevState != commentInCssValueState))
+    {
+        startIndex = text.indexOf (commentStartExp, startIndex, &startMatch);
+        /* skip quotations (usually all formatted to this point) and regexes */
+        QTextCharFormat fi = format (startIndex);
+        while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || isInsideRegex (text, startIndex))
+        {
+            startIndex = text.indexOf (commentStartExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        /* skip single-line comments */
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            startIndex = -1;
+
+        /* special handling for markdown */
+        if (progLan == "markdown" && startIndex > 0)
+        {
+            int extraBlockIndentation = 0;
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    extraBlockIndentation = prevData->labelInfo().length();
+            }
+            if (text.indexOf (QRegularExpression ("^#+\\s+.*"), 0) == 0
+                || text.indexOf (QRegularExpression (QStringLiteral ("^( {")
+                                                     + QString::number (4 + extraBlockIndentation)
+                                                     + QStringLiteral (",}|\\s*\\t+\\s*).*")), 0) == 0)
+            {
+                return false; // no comment start sign inside headings or code blocks
+            }
+            /* no comment start sign inside footnotes, images or links */
+            QRegularExpressionMatch mMatch;
+            static const QRegularExpression mExp ("\\[\\^[^\\]]+\\]"
+                                                  "|"
+                                                  "\\!\\[[^\\]\\^]*\\]\\s*"
+                                                  "(\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)|\\s*\\[[^\\]]*\\])"
+                                                  "|"
+                                                  "\\[[^\\]\\^]*\\]\\s*\\[[^\\]\\s]*\\]"
+                                                  "|"
+                                                  "\\[[^\\]\\^]*\\]\\s*\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)"
+                                                  "|"
+                                                  "\\[[^\\]\\^]*\\]:\\s+\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*");
+            int mStart = text.indexOf (mExp, 0, &mMatch);
+            while (mStart >= 0 && mStart < startIndex)
+            {
+                int mEnd = mStart + mMatch.capturedLength();
+                if (startIndex < mEnd)
+                {
+                    startIndex = text.indexOf (commentStartExp, mEnd, &startMatch);
+                    if (startIndex == -1) return false;
+                }
+                mStart = text.indexOf (mExp, mEnd, &mMatch);
+            }
+        }
+    }
+
+    while (startIndex >= 0)
+    {
+        int endIndex;
+        /* when the comment start is in the prvious line
+           and the search for the comment end has just begun... */
+        if ((prevState == commState
+             || prevState == commentInCssBlockState
+             || prevState == commentInCssValueState)
+            && startIndex == 0)
+            /* ... search for the comment end from the line start */
+            endIndex = text.indexOf (commentEndExp, 0, &endMatch);
+        else
+            endIndex = text.indexOf (commentEndExp,
+                                     startIndex + startMatch.capturedLength(),
+                                     &endMatch);
+
+        /* skip quotations */
+        QTextCharFormat fi = format (endIndex);
+        if (progLan != "fountain") // in Fountain, altQuoteFormat is used for notes
+        { // FIXME: Is this really needed? Commented quotes are skipped in formatting multi-line quotes.
+            while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+            {
+                endIndex = text.indexOf (commentEndExp, endIndex + 1, &endMatch);
+                fi = format (endIndex);
+            }
+        }
+
+        if (/*!hugeText && */endIndex >= 0 && progLan != "xml" && progLan != "html")
+        {
+            /* because multiline commnets weren't taken into account in
+               singleLineComment(), that method should be used here again */
+            int badIndex = endIndex + endMatch.capturedLength();
+            bool hadSingleLineComment = false;
+            int i = 0;
+            for (i = badIndex; i < text.length(); ++i)
+            {
+                if (format (i) == commentFormat || format (i) == urlFormat)
+                {
+                    setFormat (i, text.length() - i, mainFormat);
+                    hadSingleLineComment = true;
+                    break;
+                }
+            }
+            singleLineComment (text, badIndex);
+            /* because the previous single-line comment may have been
+               removed now, quotes should be checked again from its start */
+            if (hadSingleLineComment && multilineQuote_)
+                rehighlightNextBlock = multiLineQuote (text, i, commState);
+        }
+
+        int commentLength;
+        if (endIndex == -1)
+        {
+            if (currentBlockState() != cssBlockState
+                && currentBlockState() != cssValueState)
+            {
+                setCurrentBlockState (commState);
+            }
+            else
+            { // CSS
+                if (currentBlockState() == cssValueState)
+                    setCurrentBlockState (commentInCssValueState);
+                else
+                    setCurrentBlockState (commentInCssBlockState);
+            }
+            commentLength = text.length() - startIndex;
+        }
+        else
+            commentLength = endIndex - startIndex
+                            + endMatch.capturedLength();
+        //if (!hugeText)
+        //{
+            setFormat (startIndex, commentLength, comFormat);
+
+            /* format urls and email addresses inside the comment */
+            QString str = text.mid (startIndex, commentLength);
+            int pIndex = 0;
+            QRegularExpressionMatch urlMatch;
+            while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+            {
+                setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+                pIndex += urlMatch.capturedLength();
+            }
+            /* format note patterns too */
+            pIndex = 0;
+            while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+            {
+                if (format (pIndex + startIndex) != urlFormat)
+                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+                pIndex += urlMatch.capturedLength();
+            }
+        //}
+
+        startIndex = text.indexOf (commentStartExp, startIndex + commentLength, &startMatch);
+
+        /* skip single-line comments and quotations again */
+        fi = format (startIndex);
+        while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || isInsideRegex (text, startIndex))
+        {
+            startIndex = text.indexOf (commentStartExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            startIndex = -1;
+    }
+
+    /* reset the block state if this line created a next-line comment
+       whose starting single-line comment sign is commented out now */
+    if (currentBlockState() == nextLineCommentState
+        && format (text.size() - 1) != commentFormat && format (text.size() - 1) != urlFormat)
+    {
+        setCurrentBlockState (0);
+    }
+
+    return rehighlightNextBlock;
+}
+/*************************/
+// Handles escaped backslashes too.
+bool Highlighter::textEndsWithBackSlash (const QString &text)
+{
+    QString str = text;
+    int n = 0;
+    while (!str.isEmpty() && str.endsWith ("\\"))
+    {
+        str.truncate (str.size() - 1);
+        ++n;
+    }
+    return (n % 2 != 0);
+}
+/*************************/
+// This also covers single-line quotes. It comes after single-line comments
+// and before multi-line ones are formatted. "comState" is the comment state,
+// whose default is "commentState" but may be different for some languages.
+// Sometimes (with multi-language docs), formatting should be started from "start".
+bool Highlighter::multiLineQuote (const QString &text, const int start, int comState)
+{
+    if (progLan == "perl" || progLan == "ruby")
+    {
+        multiLinePerlQuote (text);
+        return false;
+    }
+    if (progLan == "javascript" || progLan == "qml")
+    {
+        multiLineJSlQuote (text, start, comState);
+        return false;
+    }
+//--------------------
+    /* these are only for C++11 raw string literals,
+       whose pattern is R"(\bR"([^(]*)\(.*(?=\)\1"))" */
+    bool rehighlightNextBlock = false;
+    QString delimStr;
+    QTextCharFormat rFormat;
+    TextBlockData *cppData = nullptr;
+    if (progLan == "cpp")
+    {
+        rFormat = quoteFormat;
+        rFormat.setFontWeight (QFont::Bold);
+        cppData = static_cast<TextBlockData *>(currentBlock().userData());
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                delimStr = prevData->labelInfo();
+        }
+    }
+//--------------------
+
+    int index = start;
+    QRegularExpressionMatch quoteMatch;
+    QRegularExpression quoteExpression;
+    if (mixedQuotes_)
+        quoteExpression = mixedQuoteMark;
+    else
+        quoteExpression = quoteMark;
+    int quote = doubleQuoteState;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if ((prevState != doubleQuoteState
+         && prevState != singleQuoteState)
+        || index > 0)
+    {
+        index = text.indexOf (quoteExpression, index);
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true)
+               || isInsideRegex (text, index)
+               || isMLCommented (text, index, comState))
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat) // single-line and Python
+            index = text.indexOf (quoteExpression, index + 1);
+
+        /* with markdown, "`" should be distinguished from "```" for code bocks (-> highlightBlock()) */
+        if (index >= 0 && progLan == "markdown")
+        {
+            while (index >= 0 && index == text.indexOf (QRegularExpression ("```(?!`)"), index))
+            {
+                index = text.indexOf (quoteExpression, index + 3);
+                while (isEscapedQuote (text, index, true)
+                       || isMLCommented (text, index, comState))
+                {
+                    index = text.indexOf (quoteExpression, index + 1);
+                }
+                while (format (index) == commentFormat || format (index) == urlFormat)
+                    index = text.indexOf (quoteExpression, index + 1);
+            }
+        }
+
+        /* if the start quote is found... */
+        if (index >= 0)
+        {
+            if (mixedQuotes_)
+            {
+                /* ... distinguish between double and single quotes */
+                if (text.at (index) == quoteMark.pattern().at (0))
+                {
+                    if (progLan == "cpp" && index > start)
+                    {
+                        QRegularExpressionMatch cppMatch;
+                        if (text.at (index - 1) == 'R' && index - 1 == text.indexOf (QRegularExpression (R"(\bR"([^(]*)\()"), index - 1, &cppMatch))
+                        {
+                            delimStr = ")" + cppMatch.captured (1);
+                            setFormat (index - 1, 1, rFormat);
+                        }
+                    }
+                    quoteExpression = quoteMark;
+                    quote = doubleQuoteState;
+                }
+                else
+                {
+                    quoteExpression = singleQuoteMark;
+                    quote = singleQuoteState;
+                }
+            }
+        }
+    }
+    else // but if we're inside a quotation...
+    {
+        /* ... distinguish between the two quote kinds
+           by checking the previous line */
+        if (mixedQuotes_)
+        {
+            quote = prevState;
+            if (quote == doubleQuoteState)
+                quoteExpression = quoteMark;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+    }
+
+    while (index >= 0)
+    {
+        /* if the search is continued... */
+        if (quoteExpression == mixedQuoteMark)
+        {
+            /* ... distinguish between double and single quotes
+               again because the quote mark may have changed */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                if (progLan == "cpp" && index > start)
+                {
+                    QRegularExpressionMatch cppMatch;
+                    if (text.at (index - 1) == 'R'  && index - 1 == text.indexOf (QRegularExpression (R"(\bR"([^(]*)\()"), index - 1, &cppMatch))
+                    {
+                        delimStr = ")" + cppMatch.captured (1);
+                        setFormat (index - 1, 1, rFormat);
+                    }
+                }
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else
+            {
+                quoteExpression = singleQuoteMark;
+                quote = singleQuoteState;
+            }
+        }
+
+        int endIndex;
+        /* if there's no start quote ... */
+        if (index == 0
+            && (prevState == doubleQuoteState || prevState == singleQuoteState))
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
+        }
+        else // otherwise, search from the start quote
+            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
+
+        if (delimStr.isEmpty())
+        { // check if the quote is escaped
+            while (isEscapedQuote (text, endIndex, false))
+                endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
+        }
+        else
+        { // check if the quote is inside a C++11 raw string literal
+            while (endIndex > -1
+                   && (endIndex - delimStr.length() < start
+                       || text.mid (endIndex - delimStr.length(), delimStr.length()) != delimStr))
+            {
+                endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
+            }
+        }
+
+        bool isQuotation = true;
+        if (endIndex == -1)
+        {
+            if (progLan == "c" || progLan == "cpp")
+            {
+                /* In c and cpp, multiline double quotes need backslash and
+                   there's no multiline single quote. Moreover, In C++11,
+                   there can be multiline raw string literals. */
+                if (quoteExpression == singleQuoteMark
+                    || (quoteExpression == quoteMark && delimStr.isEmpty() && !textEndsWithBackSlash (text)))
+                {
+                    endIndex = text.length();
+                }
+            }
+            else if (progLan == "markdown")
+            { // this is the main difference of a markdown inline code from a single-line quote
+                isQuotation = false;
+            }
+            else if (progLan == "go")
+            {
+                if (quoteExpression == quoteMark) // no multiline double quote
+                    endIndex = text.length();
+            }
+        }
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            if (isQuotation)
+                setCurrentBlockState (quote);
+            quoteLength = text.length() - index;
+
+            /* set the delimiter string for C++11 */
+            if (cppData && !delimStr.isEmpty())
+            {
+                /* with a multiline C++11 raw string literal, if the delimiter is changed
+                   but the state of the current block isn't changed, the next block won't
+                   be highlighted automatically, so it should be rehighlighted forcefully */
+                if (cppData->lastState() == quote)
+                {
+                    QTextBlock nextBlock = currentBlock().next();
+                    if (nextBlock.isValid())
+                    {
+                        if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
+                        {
+                            if (nextData->labelInfo() != delimStr)
+                                rehighlightNextBlock = true;
+                        }
+                    }
+                }
+                cppData->insertInfo (delimStr);
+                setCurrentBlockUserData (cppData);
+            }
+        }
+        else
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength(); // 1 or 0 (open quotation without ending backslash)
+        if (isQuotation)
+        {
+            setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
+                                                                        : altQuoteFormat);
+            /* URLs should be formatted in a different way inside quotes because,
+               otherwise, there would be no difference between URLs inside quotes and
+               those inside comments and so, they couldn't be escaped correctly when needed. */
+            QString str = text.mid (index, quoteLength);
+            int urlIndex = 0;
+            QRegularExpressionMatch urlMatch;
+            while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+            {
+                 setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+                 urlIndex += urlMatch.capturedLength();
+            }
+        }
+
+        /* the next quote may be different */
+        if (mixedQuotes_)
+            quoteExpression = mixedQuoteMark;
+        index = text.indexOf (quoteExpression, index + quoteLength);
+
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true)
+               || isInsideRegex (text, index)
+               || isMLCommented (text, index, comState, endIndex + 1))
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteExpression, index + 1);
+
+        if (index >= 0 && progLan == "markdown")
+        {
+            while (index >= 0 && index == text.indexOf (QRegularExpression ("```(?!`)"), index))
+            {
+                index = text.indexOf (quoteExpression, index + 3);
+                while (isEscapedQuote (text, index, true)
+                       || isMLCommented (text, index, comState))
+                {
+                    index = text.indexOf (quoteExpression, index + 1);
+                }
+                while (format (index) == commentFormat || format (index) == urlFormat)
+                    index = text.indexOf (quoteExpression, index + 1);
+            }
+        }
+        delimStr.clear();
+    }
+    return rehighlightNextBlock;
+}
+/*************************/
+// Perl's (and Ruby's) multiline quote highlighting comes here to support backquotes.
+// Also see isPerlQuoted().
+void Highlighter::multiLinePerlQuote (const QString &text)
+{
+    int index = 0;
+    QRegularExpressionMatch quoteMatch;
+    QRegularExpression quoteExpression = mixedQuoteBackquote;
+    int quote = doubleQuoteState;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if (prevState != doubleQuoteState && prevState != singleQuoteState)
+    {
+        index = text.indexOf (quoteExpression, index);
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true) || isInsideRegex (text, index))
+            index = text.indexOf (quoteExpression, index + 1);
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteExpression, index + 1);
+
+        /* if the start quote is found... */
+        if (index >= 0)
+        {
+            /* ... distinguish between the three kinds of quote */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else
+            {
+                if (text.at (index) == '\'')
+                    quoteExpression = singleQuoteMark;
+                else
+                    quoteExpression = backQuote;
+                quote = singleQuoteState;
+            }
+        }
+    }
+    else // but if we're inside a quotation...
+    {
+        /* ... distinguish between the three kinds of quote */
+        quote = prevState;
+        if (quote == doubleQuoteState)
+            quoteExpression = quoteMark;
+        else
+        {
+            bool backquoted (false);
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
+                if (prevData && prevData->getProperty())
+                    backquoted = true;
+            }
+            if (backquoted)
+                quoteExpression = backQuote;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+    }
+
+    while (index >= 0)
+    {
+        /* if the search is continued... */
+        if (quoteExpression == mixedQuoteBackquote)
+        {
+            /* ... distinguish between the three kinds of quote
+               again because the quote mark may have changed */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else
+            {
+                if (text.at (index) == '\'')
+                    quoteExpression = singleQuoteMark;
+                else
+                    quoteExpression = backQuote;
+                quote = singleQuoteState;
+            }
+        }
+
+        int endIndex;
+        /* if there's no start quote ... */
+        if (index == 0
+            && (prevState == doubleQuoteState || prevState == singleQuoteState))
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
+        }
+        else // otherwise, search from the start quote
+            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
+
+        // check if the quote is escaped
+        while (isEscapedQuote (text, endIndex, false))
+            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (quote);
+            if (quoteExpression == backQuote)
+            {
+                if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                    data->setProperty (true);
+                /* NOTE: The next block will be rehighlighted at highlightBlock()
+                         (-> multiLineRegex (text, 0);) if the property is changed. */
+            }
+            quoteLength = text.length() - index;
+        }
+        else
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength(); // 1
+        setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
+                                                                    : altQuoteFormat);
+        QString str = text.mid (index, quoteLength);
+        int urlIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+        {
+             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+             urlIndex += urlMatch.capturedLength();
+        }
+
+        /* the next quote may be different */
+        quoteExpression = mixedQuoteBackquote;
+        index = text.indexOf (quoteExpression, index + quoteLength);
+
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true) || isInsideRegex (text, index))
+            index = text.indexOf (quoteExpression, index + 1);
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteExpression, index + 1);
+    }
+}
+/*************************/
+// JS multiline quote highlighting comes here to support backquotes (template literals).
+// Also see isJSQuoted().
+void Highlighter::multiLineJSlQuote (const QString &text, const int start, int comState)
+{
+    int index = start;
+    QRegularExpressionMatch quoteMatch;
+    QRegularExpression quoteExpression = mixedQuoteBackquote;
+    int quote = doubleQuoteState;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if ((prevState != doubleQuoteState
+         && prevState != singleQuoteState
+         && prevState != JS_templateLiteralState)
+        || index > 0)
+    {
+        index = text.indexOf (quoteExpression, index);
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true)
+               || isInsideRegex (text, index)
+               || isMLCommented (text, index, comState))
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat) // single-line
+            index = text.indexOf (quoteExpression, index + 1);
+
+        /* if the start quote is found... */
+        if (index >= 0)
+        {
+            /* ... distinguish between double and single quotes */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else if (text.at (index) == '\'')
+            {
+                quoteExpression = singleQuoteMark;
+                quote = singleQuoteState;
+            }
+            else
+            {
+                quoteExpression = backQuote;
+                quote = JS_templateLiteralState;
+            }
+        }
+    }
+    else // but if we're inside a quotation...
+    {
+        /* ... distinguish between the two quote kinds
+           by checking the previous line */
+        quote = prevState;
+        if (quote == doubleQuoteState)
+            quoteExpression = quoteMark;
+        else if (quote == singleQuoteState)
+            quoteExpression = singleQuoteMark;
+        else
+            quoteExpression = backQuote;
+    }
+
+    while (index >= 0)
+    {
+        /* if the search is continued... */
+        if (quoteExpression == mixedQuoteBackquote)
+        {
+            /* ... distinguish between double and single quotes
+               again because the quote mark may have changed */
+            if (text.at (index) == quoteMark.pattern().at (0))
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else if (text.at (index) == '\'')
+            {
+                quoteExpression = singleQuoteMark;
+                quote = singleQuoteState;
+            }
+            else
+            {
+                quoteExpression = backQuote;
+                quote = JS_templateLiteralState;
+            }
+        }
+
+        int endIndex;
+        /* if there's no start quote ... */
+        if (index == 0
+            && (prevState == doubleQuoteState || prevState == singleQuoteState
+                || prevState == JS_templateLiteralState))
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
+        }
+        else // otherwise, search from the start quote
+            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
+
+        /* check if the quote is escaped */
+        while (isEscapedQuote (text, endIndex, false))
+            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            /* In JS, multiline double and single quotes need backslash. */
+            if ((quoteExpression == singleQuoteMark || quoteExpression == quoteMark)
+                && !textEndsWithBackSlash (text))
+            { // see NOTE of isEscapedRegex() and also the end of multiLineRegex()
+                setCurrentBlockState (regexExtraState);
+            }
+            else
+                setCurrentBlockState (quote);
+            quoteLength = text.length() - index;
+        }
+        else
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength(); // 1
+
+        setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
+                                                                    : altQuoteFormat);
+
+        QString str = text.mid (index, quoteLength);
+        int urlIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+        {
+            setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+            urlIndex += urlMatch.capturedLength();
+        }
+
+        /* the next quote may be different */
+        quoteExpression = mixedQuoteBackquote;
+        index = text.indexOf (quoteExpression, index + quoteLength);
+
+        /* skip escaped start quotes and all comments */
+        while (isEscapedQuote (text, index, true)
+               || isInsideRegex (text, index)
+               || isMLCommented (text, index, comState, endIndex + 1))
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteExpression, index + 1);
+    }
+}
+/*************************/
+// Generalized form of setFormat(), where "oldFormat" shouldn't be reformatted.
+void Highlighter::setFormatWithoutOverwrite (int start,
+                                             int count,
+                                             const QTextCharFormat &newFormat,
+                                             const QTextCharFormat &oldFormat)
+{
+    int index = start; // always >= 0
+    int indx;
+    while (index < start + count)
+    {
+        QTextCharFormat fi = format (index);
+        while (index < start + count
+               && (fi == oldFormat
+                   /* skip comments and quotes */
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            ++ index;
+            fi = format (index);
+        }
+        if (index < start + count)
+        {
+            indx = index;
+            fi = format (indx);
+            while (indx < start + count
+                   && fi != oldFormat
+                   && fi != commentFormat && fi != urlFormat
+                   && fi != quoteFormat && fi != altQuoteFormat && fi != urlInsideQuoteFormat)
+            {
+                ++ indx;
+                fi = format (indx);
+            }
+            setFormat (index, indx - index , newFormat);
+            index = indx;
+        }
+    }
+}
+/*************************/
+// XML quotes are handled as multiline quotes for possible XML doc mistakes
+// to be seen easily and also because the double quote can be written as """.
+// This comes after values are formatted.
+void Highlighter::xmlQuotes (const QString &text)
+{
+    int index = 0;
+    static const QRegularExpression xmlMixedQuote ("\"|"|\'");
+    static const QRegularExpression doubleQuote ("\"|"");
+    static const QRegularExpression virtualQuote (""");
+    QRegularExpressionMatch quoteMatch;
+    QRegularExpression quoteExpression = xmlMixedQuote;
+    int quote = doubleQuoteState;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if (prevState != doubleQuoteState
+        && prevState != singleQuoteState)
+    {
+        index = text.indexOf (quoteExpression);
+        /* skip all comments and all values (that are formatted by multiLineComment()) */
+        while (isMLCommented (text, index, commentState)
+               || format (index) == neutralFormat)
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+
+        /* if the start quote is found... */
+        if (index >= 0)
+        {
+            /* ... distinguish between double, virtual and single quotes */
+            if (text.at (index) == '\"')
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else if (text.mid (index, 6) == """)
+            {
+                quoteExpression = virtualQuote;
+                quote = doubleQuoteState;
+            }
+            else
+            {
+                quoteExpression = singleQuoteMark;
+                quote = singleQuoteState;
+            }
+        }
+    }
+    else // but if we're inside a quotation...
+    {
+        /* ... distinguish between the two quote kinds
+           by checking the previous line */
+        quote = prevState;
+        if (quote == doubleQuoteState)
+            quoteExpression = doubleQuote;
+        else
+            quoteExpression = singleQuoteMark;
+    }
+
+    while (index >= 0)
+    {
+        /* if the search is continued... */
+        if (quoteExpression == xmlMixedQuote)
+        {
+            /* ... distinguish between double, virtual and single
+               quotes again because the quote mark may have changed */
+            if (text.at (index) == '\"')
+            {
+                quoteExpression = quoteMark;
+                quote = doubleQuoteState;
+            }
+            else if (text.mid (index, 6) == """)
+            {
+                quoteExpression = virtualQuote;
+                quote = doubleQuoteState;
+            }
+            else
+            {
+                quoteExpression = singleQuoteMark;
+                quote = singleQuoteState;
+            }
+        }
+
+        /* search for the end quote from the start quote */
+        int endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
+
+        /* but if there's no start quote ... */
+        if (index == 0
+            && (prevState == doubleQuoteState || prevState == singleQuoteState))
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
+        }
+
+        if (endIndex == -1)
+        {
+            /* tolerate a mismatch between `"` and `"` as far as possible
+               but show the error by formatting `>` or `>` */
+            QRegularExpressionMatch match;
+            int closing = text.indexOf (xmlGt, index, &match);
+            if (closing > -1)
+                endIndex = closing + match.capturedLength();
+        }
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (quote);
+            quoteLength = text.length() - index;
+        }
+        else
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength();
+        setFormat (index, quoteLength,
+                   quoteExpression == quoteMark
+                   || quoteExpression == virtualQuote ? quoteFormat : altQuoteFormat);
+
+        QString str = text.mid (index, quoteLength);
+        int urlIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+        {
+             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+             urlIndex += urlMatch.capturedLength();
+        }
+
+        /* the next quote may be different */
+        quoteExpression = xmlMixedQuote;
+        index = text.indexOf (quoteExpression, index + quoteLength);
+
+        while (isMLCommented (text, index, commentState, endIndex + quoteMatch.capturedLength())
+               || format (index) == neutralFormat)
+        {
+            index = text.indexOf (quoteExpression, index + 1);
+        }
+    }
+}
+/*************************/
+// Check if the current block is inside a "here document" and format it accordingly.
+// (Open quotes aren't taken into account when they happen after the start delimiter.)
+bool Highlighter::isHereDocument (const QString &text)
+{
+    /*if (progLan != "sh" && progLan != "makefile" && progLan != "cmake"
+        && progLan != "perl" && progLan != "ruby")
+    {
+        return false;
+        // "<<([A-Za-z0-9_]+)|<<(\'[A-Za-z0-9_]+\')|<<(\"[A-Za-z0-9_]+\")"
+    }*/
+
+    QTextBlock prevBlock = currentBlock().previous();
+    int prevState = previousBlockState();
+
+    QTextCharFormat blockFormat;
+    blockFormat.setForeground (Violet);
+    QTextCharFormat delimFormat = blockFormat;
+    delimFormat.setFontWeight (QFont::Bold);
+    QString delimStr;
+
+    /* format the start delimiter */
+    if (!prevBlock.isValid()
+        || (prevState >= 0 && prevState < endState))
+    {
+        int pos = 0;
+        QRegularExpressionMatch match;
+        while ((pos = text.indexOf (hereDocDelimiter, pos, &match)) >= 0
+               && (isQuoted (text, pos, progLan == "sh") // escaping start double quote before "$("
+                   || (progLan == "perl" && isInsideRegex (text, pos))))
+
+        {
+            pos += match.capturedLength();
+        }
+        if (pos >= 0)
+        {
+            int insideCommentPos;
+            if (progLan == "sh")
+            {
+                static const QRegularExpression commentSH ("^#.*|\\s+#.*");
+                insideCommentPos = text.indexOf (commentSH);
+            }
+            else
+            {
+                static const QRegularExpression commentOthers ("#.*");
+                insideCommentPos = text.indexOf (commentOthers);
+            }
+            if (insideCommentPos == -1 || pos < insideCommentPos
+                || isQuoted (text, insideCommentPos, progLan == "sh")
+                || (progLan == "perl" && isInsideRegex (text, insideCommentPos)))
+            { // the delimiter isn't (single-)commented out
+                int i = 1;
+                while ((delimStr = match.captured (i)).isEmpty() && i <= 3)
+                {
+                    ++i;
+                    delimStr = match.captured (i);
+                }
+
+                if (progLan == "perl")
+                {
+                    if (delimStr.contains ('`')) // Perl's delimiter can have backquotes
+                        delimStr = delimStr.split ('`').at (1);
+                }
+
+                if (!delimStr.isEmpty())
+                {
+                    /* remove quotes */
+                    if (delimStr.contains ('\''))
+                        delimStr = delimStr.split ('\'').at (1);
+                    if (delimStr.contains ('\"'))
+                        delimStr = delimStr.split ('\"').at (1);
+                    /* remove the start backslash if it exists */
+                    if (QString (delimStr.at (0)) == "\\")
+                        delimStr = delimStr.remove (0, 1);
+                }
+
+                if (!delimStr.isEmpty())
+                {
+                    int n = static_cast<int>(qHash (delimStr));
+                    int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0)); // always an even number but maybe negative
+                    if (progLan == "sh")
+                    {
+                        if (isQuoted (text, pos, false))
+                        { // to know whether a double quote is added/removed before "$(" in the current line
+                            state > 0 ? state += 2 : state -= 2;
+                        }
+                        if (prevState == doubleQuoteState || prevState == SH_DoubleQuoteState)
+                        { // to know whether a double quote is added/removed before "$(" in a previous line
+                            state > 0 ? state += 4 : state -= 4; // not 2 -> not to be canceled above
+                        }
+                    }
+                    setCurrentBlockState (state);
+                    setFormat (text.indexOf (delimStr, pos),
+                               delimStr.length(),
+                               delimFormat);
+
+                    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+                    if (!data) return false;
+                    data->insertInfo (delimStr);
+                    setCurrentBlockUserData (data);
+
+                    return false;
+                }
+            }
+        }
+    }
+
+    if (prevState >= endState || prevState < -1)
+    {
+        TextBlockData *prevData = nullptr;
+        if (prevBlock.isValid())
+            prevData = static_cast<TextBlockData *>(prevBlock.userData());
+        if (!prevData) return false;
+
+        delimStr = prevData->labelInfo();
+        int l = 0;
+        if (progLan == "perl" || progLan == "ruby")
+        {
+            QRegularExpressionMatch rMatch;
+            /* the terminating string must appear on a line by itself */
+            QRegularExpression r ("\\s*" + delimStr + "(?=\\s*$)");
+            if (text.indexOf (r, 0, &rMatch) == 0)
+                l = rMatch.capturedLength();
+        }
+        else if (text == delimStr
+                 || (text.startsWith (delimStr)
+                     && text.indexOf (QRegularExpression ("\\W+")) == delimStr.length()))
+        {
+            l = delimStr.length();
+        }
+        if (l > 0)
+        {
+            /* format the end delimiter */
+            setFormat (0, l, delimFormat);
+            return false;
+        }
+        else
+        {
+            /* format the contents */
+            TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+            if (!data) return false;
+            data->insertInfo (delimStr);
+            /* inherit the previous data property and open nests */
+            if (bool p = prevData->getProperty())
+                data->setProperty (p);
+            int N = prevData->openNests();
+            if (N > 0)
+            {
+                data->insertNestInfo (N);
+                QSet<int> Q = prevData->openQuotes();
+                if (!Q.isEmpty())
+                    data->insertOpenQuotes (Q);
+            }
+            setCurrentBlockUserData (data);
+            if (prevState % 2 == 0)
+                setCurrentBlockState (prevState - 1);
+            else
+                setCurrentBlockState (prevState);
+            setFormat (0, text.length(), blockFormat);
+
+            /* also, format whitespaces */
+            for (const HighlightingRule &rule : qAsConst (highlightingRules))
+            {
+                if (rule.format == whiteSpaceFormat)
+                {
+                    QRegularExpressionMatch match;
+                    int index = text.indexOf (rule.pattern, 0, &match);
+                    while (index >= 0)
+                    {
+                        setFormat (index, match.capturedLength(), rule.format);
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    }
+                    break;
+                }
+            }
+
+            return true;
+        }
+    }
+
+    return false;
+}
+/*************************/
+void Highlighter::debControlFormatting (const QString &text)
+{
+    if (text.isEmpty()) return;
+    bool formatFurther (false);
+    QRegularExpressionMatch expMatch;
+    QRegularExpression exp;
+    int indx = 0;
+    QTextCharFormat debFormat;
+    if (text.indexOf (QRegularExpression ("^[^\\s:]+:(?=\\s*)")) == 0)
+    {
+        formatFurther = true;
+        exp.setPattern ("^[^\\s:]+(?=:)");
+        if (text.indexOf (exp, 0, &expMatch) == 0)
+        {
+            /* before ":" */
+            debFormat.setFontWeight (QFont::Bold);
+            debFormat.setForeground (DarkBlue);
+            setFormat (0, expMatch.capturedLength(), debFormat);
+
+            /* ":" */
+            debFormat.setForeground (DarkMagenta);
+            indx = text.indexOf (":");
+            setFormat (indx, 1, debFormat);
+            indx ++;
+
+            if (indx < text.count())
+            {
+                /* after ":" */
+                debFormat.setFontWeight (QFont::Normal);
+                debFormat.setForeground (DarkGreenAlt);
+                setFormat (indx, text.count() - indx , debFormat);
+            }
+        }
+    }
+    else if (text.indexOf (QRegularExpression ("^\\s+")) == 0)
+    {
+        formatFurther = true;
+        debFormat.setForeground (DarkGreenAlt);
+        setFormat (0, text.count(), debFormat);
+    }
+
+    if (formatFurther)
+    {
+        /* parentheses and brackets */
+        exp.setPattern ("\\([^\\(\\)\\[\\]]+\\)|\\[[^\\(\\)\\[\\]]+\\]");
+        int index = indx;
+        debFormat = neutralFormat;
+        debFormat.setFontItalic (true);
+        while ((index = text.indexOf (exp, index, &expMatch)) > -1)
+        {
+            int ml = expMatch.capturedLength();
+            setFormat (index, ml, neutralFormat);
+            if (ml > 2)
+            {
+                setFormat (index + 1, ml - 2 , debFormat);
+
+                QRegularExpression rel ("<|>|\\=|~");
+                int i = index;
+                while ((i = text.indexOf (rel, i)) > -1 && i < index + ml - 1)
+                {
+                    QTextCharFormat relFormat;
+                    relFormat.setForeground (DarkMagenta);
+                    setFormat (i, 1, relFormat);
+                    ++i;
+                }
+            }
+            index = index + ml;
+        }
+
+        /* non-commented URLs */
+        debFormat.setForeground (DarkGreenAlt);
+        debFormat.setFontUnderline (true);
+        QRegularExpressionMatch urlMatch;
+        while ((indx = text.indexOf (urlPattern, indx, &urlMatch)) > -1)
+        {
+            setFormat (indx, urlMatch.capturedLength(), debFormat);
+            indx += urlMatch.capturedLength();
+        }
+    }
+}
+/*************************/
+void Highlighter::latexFormula (const QString &text)
+{
+    int index = 0;
+    QString exp;
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    static const QRegularExpression latexFormulaStart ("\\${2}|\\$|\\\\\\(|\\\\\\[|\\\\begin\\s*{math}|\\\\begin\\s*{displaymath}|\\\\begin\\s*{equation}|\\\\begin\\s*{verbatim}|\\\\begin\\s*{verbatim\\*}");
+    QRegularExpressionMatch startMatch;
+    QRegularExpression endExp;
+    QRegularExpressionMatch endMatch;
+
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            exp = prevData->labelInfo();
+    }
+
+    if (exp.isEmpty())
+    {
+        index = text.indexOf (latexFormulaStart, index, &startMatch);
+        while (isEscapedChar (text, index))
+            index = text.indexOf (latexFormulaStart, index + 1, &startMatch);
+        /* skip single-line comments */
+        if (format (index) == commentFormat || format (index) == urlFormat)
+            index = -1;
+    }
+
+    while (index >= 0)
+    {
+        int badIndex = -1;
+        int endIndex;
+
+        if (!exp.isEmpty() && index == 0)
+        {
+            endExp.setPattern (exp);
+            endIndex = text.indexOf (endExp, 0, &endMatch);
+        }
+        else
+        {
+            if (startMatch.capturedLength() == 1)
+                endExp.setPattern ("\\$");
+            else if (startMatch.capturedLength() == 2)
+            {
+                if (text.at (index + 1) == '$')
+                    endExp.setPattern ("\\${2}");
+                else if (text.at (index + 1) == '(')
+                    endExp.setPattern ("\\\\\\)");
+                else// if (text.at (index + 1) == '[')
+                    endExp.setPattern ("\\\\\\]");
+            }
+            else
+            {
+                if (text.at (index + startMatch.capturedLength() - 2) == 'h')
+                {
+                    if (startMatch.capturedLength() > 6
+                        && text.at (index + startMatch.capturedLength() - 6) == 'y')
+                    {
+                        endExp.setPattern ("\\\\end\\s*{displaymath}");
+                    }
+                    else
+                        endExp.setPattern ("\\\\end\\s*{math}");
+                }
+                else if (text.at (index + startMatch.capturedLength() - 2) == 'n')
+                    endExp.setPattern ("\\\\end\\s*{equation}");
+                else if (text.at (index + startMatch.capturedLength() - 2) == 'm')
+                    endExp.setPattern ("\\\\end\\s*{verbatim}");
+                else
+                    endExp.setPattern ("\\\\end\\s*{verbatim\\*}");
+            }
+            endIndex = text.indexOf (endExp,
+                                     index + startMatch.capturedLength(),
+                                     &endMatch);
+            /* don't format "\begin{math}" or "\begin{equation}" or... */
+            if (startMatch.capturedLength() > 2)
+                index += startMatch.capturedLength();
+        }
+
+        while (isEscapedChar (text, endIndex))
+            endIndex = text.indexOf (endExp, endIndex + 1, &endMatch);
+
+        /* if the formula ends ... */
+        if (endIndex >= 0)
+        {
+            /* ... clear the comment format from there to reformat later
+               because "%" may be inside a formula now */
+            badIndex = endIndex + (endMatch.capturedLength() > 2 ? 0 : endMatch.capturedLength());
+            for (int i = badIndex; i < text.length(); ++i)
+            {
+                if (format (i) == commentFormat || format (i) == urlFormat)
+                    setFormat (i, 1, neutralFormat);
+            }
+        }
+
+        int formulaLength;
+        if (endIndex == -1)
+        {
+            if (data)
+                data->insertInfo (endExp.pattern());
+            formulaLength = text.length() - index;
+        }
+        else
+            formulaLength = endIndex - index
+                            + (endMatch.capturedLength() > 2
+                                   ? 0 // don't format "\end{math}" or "\end{equation}"
+                                   : endMatch.capturedLength());
+
+        setFormat (index, formulaLength, codeBlockFormat);
+
+        /* reformat the single-line comment from here if the format was cleared before */
+        if (badIndex >= 0)
+        {
+            for (const HighlightingRule &rule : qAsConst (highlightingRules))
+            {
+                if (rule.format == commentFormat)
+                {
+                    int INDX = text.indexOf (rule.pattern, badIndex);
+                    if (INDX >= 0)
+                        setFormat (INDX, text.length() - INDX, commentFormat);
+                    /* URLs and notes were cleared too */
+                    QString str = text.mid (INDX, text.length() - INDX);
+                    int pIndex = 0;
+                    QRegularExpressionMatch urlMatch;
+                    while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+                    {
+                        setFormat (pIndex + INDX, urlMatch.capturedLength(), urlFormat);
+                        pIndex += urlMatch.capturedLength();
+                    }
+                    pIndex = 0;
+                    while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+                    {
+                        if (format (pIndex + INDX) != urlFormat)
+                            setFormat (pIndex + INDX, urlMatch.capturedLength(), noteFormat);
+                        pIndex += urlMatch.capturedLength();
+                    }
+                    break;
+                }
+            }
+        }
+
+        index = text.indexOf (latexFormulaStart, index + formulaLength, &startMatch);
+        while (isEscapedChar (text, index))
+            index = text.indexOf (latexFormulaStart, index + 1, &startMatch);
+        if (format (index) == commentFormat || format (index) == urlFormat)
+            index = -1;
+    }
+}
+/*************************/
+// Start syntax highlighting!
+void Highlighter::highlightBlock (const QString &text)
+{
+    if (progLan.isEmpty()) return;
+
+    if (progLan == "json")
+    { // Json's huge lines are also handled separately because of its special syntax
+        highlightJsonBlock (text);
+        return;
+    }
+
+    int bn = currentBlock().blockNumber();
+    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
+
+    int txtL = text.length();
+    if (txtL <= 10000)
+    {
+        /* If the paragraph separators are shown, the unformatted text
+           will be grayed out. So, we should restore its real color here.
+           This is also safe when the paragraph separators are hidden. */
+        if (mainFormatting)
+            setFormat (0, txtL, mainFormat);
+
+        if (progLan == "fountain")
+        {
+            highlightFountainBlock (text);
+            return;
+        }
+        if (progLan == "yaml")
+        {
+            highlightYamlBlock (text);
+            return;
+        }
+        if (progLan == "markdown")
+        {
+            highlightMarkdownBlock (text);
+            return;
+        }
+        if (progLan == "reST")
+        {
+            highlightReSTBlock (text);
+            return;
+        }
+    }
+
+    bool rehighlightNextBlock = false;
+    int oldOpenNests = 0; QSet<int> oldOpenQuotes; // to be used in SH_CmndSubstVar() (and perl, ruby and css)
+    bool oldProperty = false; // to be used with perl, ruby, pascal and java
+    QString oldLabel; // to be used with perl, ruby and LaTeX
+    if (TextBlockData *oldData = static_cast<TextBlockData *>(currentBlockUserData()))
+    {
+        oldOpenNests = oldData->openNests();
+        oldOpenQuotes = oldData->openQuotes();
+        oldProperty = oldData->getProperty();
+        oldLabel = oldData->labelInfo();
+    }
+
+    int index;
+    TextBlockData *data = new TextBlockData;
+    data->setLastState (currentBlockState()); // remember the last state (which may not be -1)
+    setCurrentBlockUserData (data); // to be fed in later
+    setCurrentBlockState (0); // start highlightng, with 0 as the neutral state
+
+    /* set a limit on line length */
+    if (txtL > 10000)
+    {
+        setFormat (0, txtL, translucentFormat);
+        data->setHighlighted(); // completely highlighted
+        return;
+    }
+
+    /* Java is formatted separately, partially because of "Javadoc"
+       but also because its single quotes are for literal characters */
+    if (progLan == "java")
+    {
+        singleLineJavaComment (text);
+        JavaQuote (text);
+        multiLineJavaComment (text);
+
+        if (mainFormatting)
+            javaMainFormatting (text);
+
+        javaBraces (text);
+
+        setCurrentBlockUserData (data);
+        if (currentBlockState() == data->lastState()
+            && data->getProperty() != oldProperty)
+        {
+            QTextBlock nextBlock = currentBlock().next();
+            if (nextBlock.isValid())
+                QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+        }
+        return;
+    }
+
+    /********************
+     * "Here" Documents *
+     ********************/
+
+    if (progLan == "sh" || progLan == "perl" || progLan == "ruby")
+    {
+        /* first, handle "__DATA__" in perl */
+        if (progLan == "perl")
+        {
+            static const QRegularExpression perlData ("^\\s*__(DATA|END)__");
+            QRegularExpressionMatch match;
+            if (previousBlockState() == updateState // only used below to distinguish "__DATA__"
+                || (previousBlockState() <= 0
+                    && text.indexOf (perlData, 0, &match) == 0))
+            {
+                /* ensure that the main format is applied */
+                if (!mainFormatting)
+                    setFormat (0, txtL, mainFormat);
+
+                if (match.capturedLength() > 0)
+                {
+                    QTextCharFormat dataFormat = neutralFormat;
+                    dataFormat.setFontWeight (QFont::Bold);
+                    setFormat (0, match.capturedLength(), dataFormat);
+                }
+                for (const HighlightingRule &rule : qAsConst (highlightingRules))
+                {
+                    if (rule.format == whiteSpaceFormat)
+                    {
+                        index = text.indexOf (rule.pattern, 0, &match);
+                        while (index >= 0)
+                        {
+                            setFormat (index, match.capturedLength(), rule.format);
+                            index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                        }
+                        break;
+                    }
+                }
+                setCurrentBlockState (updateState); // completely highlighted
+                data->setHighlighted();
+                return;
+            }
+        }
+        if (isHereDocument (text))
+        {
+            data->setHighlighted(); // completely highlighted
+            /* transfer the info on open quotes inside code blocks downwards */
+            if (data->openNests() > 0)
+            {
+                QTextBlock nextBlock = currentBlock().next();
+                if (nextBlock.isValid())
+                {
+                    if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
+                    {
+                        if (nextData->openQuotes() != data->openQuotes()
+                            || (nextBlock.userState() >= 0 && nextBlock.userState() < endState)) // end delimiter
+                        {
+                            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+                        }
+                    }
+                }
+            }
+            return;
+        }
+    }
+    /* just for debian control file */
+    else if (progLan == "deb")
+        debControlFormatting (text);
+
+    /************************
+     * Single-Line Comments *
+     ************************/
+
+    if (progLan != "html")
+        singleLineComment (text, 0);
+
+    /* this is only for setting the format of
+       command substitution variables in bash */
+    rehighlightNextBlock |= SH_CmndSubstVar (text, data, oldOpenNests, oldOpenQuotes);
+
+    /*******************
+     * Python Comments *
+     *******************/
+
+    pythonMLComment (text, 0);
+
+    /**********************************
+     * Pascal Quotations and Comments *
+     **********************************/
+    if (progLan == "pascal")
+    {
+        singleLinePascalComment (text);
+        pascalQuote (text);
+        multiLinePascalComment (text);
+        if (currentBlockState() == data->lastState())
+            rehighlightNextBlock |= (data->getProperty() != oldProperty);
+    }
+    /*******************************
+     * XML Quotations and Comments *
+     *******************************/
+    else if (progLan == "xml")
+    {
+        /* value is handled as a kind of comment */
+        multiLineComment (text, 0, xmlGt, xmlLt, xmlValueState, neutralFormat);
+        /* multiline quotes as signs of errors in the xml doc */
+        xmlQuotes (text);
+    }
+    /******************
+     * LaTeX Formulae *
+     ******************/
+    else if (progLan == "LaTeX")
+    {
+        latexFormula (text);
+        if (data->labelInfo() != oldLabel)
+            rehighlightNextBlock = true;
+    }
+    /*****************************************
+     * (Multiline) Quotations as well as CSS *
+     *****************************************/
+    else if (progLan == "sh") // bash has its own method
+        SH_MultiLineQuote (text);
+    else if (progLan == "css")
+    { // quotes and urls are highlighted by cssHighlighter() inside CSS values
+        cssHighlighter (text, mainFormatting);
+        rehighlightNextBlock |= (data->openNests() != oldOpenNests);
+    }
+    else if (multilineQuote_)
+        rehighlightNextBlock |= multiLineQuote (text);
+
+    /**********************
+     * Multiline Comments *
+     **********************/
+
+    if (!commentStartExpression.pattern().isEmpty() && progLan != "python")
+        rehighlightNextBlock |= multiLineComment (text, 0,
+                                                  commentStartExpression, commentEndExpression,
+                                                  commentState, commentFormat);
+
+    /* only javascript, qml, perl and ruby */
+    multiLineRegex (text, 0);
+    /* "Property" is used for knowing about backquotes, "label" is used
+       for delimiter strings and "OpenNests" for paired delimiters. */
+    if ((progLan == "perl" || progLan == "ruby") && currentBlockState() == data->lastState())
+        rehighlightNextBlock |= (data->labelInfo() != oldLabel || data->getProperty() != oldProperty
+                                 || data->openNests() != oldOpenNests);
+
+    QTextCharFormat fi;
+
+    /*************
+     * HTML Only *
+     *************/
+
+    if (progLan == "html")
+    {
+        htmlBrackets (text);
+        htmlCSSHighlighter (text);
+        htmlJavascript (text);
+        /* also consider quotes and URLs inside CSS values */
+        rehighlightNextBlock |= (data->openNests() != oldOpenNests);
+        /* go to braces matching */
+    }
+
+    /*******************
+     * Main Formatting *
+     *******************/
+
+    // we format html embedded javascript in htmlJavascript()
+    else if (mainFormatting)
+    {
+        data->setHighlighted(); // completely highlighted
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            /* single-line comments are already formatted */
+            if (rule.format == commentFormat)
+                continue;
+
+            QRegularExpressionMatch match;
+            index = text.indexOf (rule.pattern, 0, &match);
+            /* skip quotes and all comments */
+            if (rule.format != whiteSpaceFormat)
+            {
+                fi = format (index);
+                while (index >= 0
+                       && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                           || fi == commentFormat || fi == urlFormat
+                           || fi == regexFormat))
+                {
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    fi = format (index);
+                }
+            }
+
+            while (index >= 0)
+            {
+                int length = match.capturedLength();
+                int l = length;
+                /* In c/c++, the neutral pattern after "#define" may contain
+                   a (double-)slash but it's always good to check whether a
+                   part of the match is inside an already formatted region. */
+                if (rule.format != whiteSpaceFormat)
+                {
+                    while (format (index + l - 1) == commentFormat
+                           /*|| format (index + l - 1) == commentFormat
+                           || format (index + l - 1) == urlFormat
+                           || format (index + l - 1) == quoteFormat
+                           || format (index + l - 1) == altQuoteFormat
+                           || format (index + l - 1) == urlInsideQuoteFormat
+                           || format (index + l - 1) == regexFormat*/)
+                    {
+                        -- l;
+                    }
+                }
+                setFormat (index, l, rule.format);
+                index = text.indexOf (rule.pattern, index + length, &match);
+
+                if (rule.format != whiteSpaceFormat)
+                {
+                    fi = format (index);
+                    while (index >= 0
+                           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                               || fi == commentFormat || fi == urlFormat
+                               || fi == regexFormat))
+                    {
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                        fi = format (index);
+                    }
+                }
+            }
+        }
+    }
+
+    /*********************************************
+     * Parentheses, Braces and brackets Matching *
+     *********************************************/
+
+    /* left parenthesis */
+    index = text.indexOf ('(');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat
+               || (progLan == "sh" && isEscapedChar (text, index))))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat
+                   || (progLan == "sh" && isEscapedChar (text, index))))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat
+               || (progLan == "sh" && isEscapedChar (text, index))))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat
+                   || (progLan == "sh" && isEscapedChar (text, index))))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat
+               || (progLan == "sh" && isEscapedChar (text, index))))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat
+                   || (progLan == "sh" && isEscapedChar (text, index))))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat
+               || (progLan == "sh" && isEscapedChar (text, index))))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat
+                   || (progLan == "sh" && isEscapedChar (text, index))))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+
+    if (rehighlightNextBlock)
+    {
+        QTextBlock nextBlock = currentBlock().next();
+        if (nextBlock.isValid())
+            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-css.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-css.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-css.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-css.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,729 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2020 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+/* NOTE: Comments can be everywhere, inside and outside CSS blocks/values,
+         but a start comment sign may be escaped by a quotation or URL inside
+         a CSS value. Therefore, to know whether a position is commented out,
+         we need to know whether it is inside a value or not and, for that,
+         we have to divide the text line to regions of CSS values. */
+
+static inline int getSectionStart (const int pos, const QList<int> &regions, bool *isInsideRegion)
+{
+    if (regions.isEmpty()
+        || regions.contains (pos)
+        || pos < regions.first())
+    {
+        *isInsideRegion = false;
+        return 0;
+    }
+    for (int i = 0; i < regions.size() - 1; ++i)
+    {
+        if (pos > regions.at (i) && pos < regions.at (i + 1))
+        {
+            *isInsideRegion = (i % 2 == 0);
+            return regions.at (i);
+        }
+    }
+    *isInsideRegion = (regions.size() % 2 != 0);
+    return regions.last();
+}
+
+bool Highlighter::isCSSCommented (const QString &text,
+                                  const QList<int> &valueRegions,
+                                  const int index,
+                                  int prevQuote,
+                                  bool prevUrl)
+{
+    if (index < 0)  return false;
+
+    bool insideValue;
+    int start = getSectionStart (index, valueRegions, &insideValue);
+
+    bool res = false;
+    int pos = - 1;
+    int N;
+    QRegularExpression commentExpression;
+    int prevState = previousBlockState();
+    if (start > 0
+        || (prevState != commentState
+            && prevState != commentInCssBlockState
+            && prevState != commentInCssValueState))
+    {
+        N = 0;
+        pos = start - 1;
+        commentExpression = commentStartExpression;
+    }
+    else
+    {
+        N = 1;
+        res = true;
+        commentExpression = commentEndExpression;
+    }
+
+    while ((pos = text.indexOf (commentExpression, pos + 1)) >= 0)
+    {
+        /* skip formatted quotations and URLs (in values) */
+        if (format (pos) == quoteFormat || format (pos) == altQuoteFormat)
+            continue;
+
+        ++N;
+        if (pos >= index)
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        if (N % 2 != 0) // a start comment...
+        {
+            /* ... inside an attribute selector... */
+            if ((!insideValue && isInsideAttrSelector (text, start, pos))
+                 /* ... or inside a quotation or URL */
+                 || (insideValue  // quotations and URLs exist only inside values
+                     && (isQuotedInCSSValue (text, start, pos, prevQuote, prevUrl) > 0
+                         || isInsideCSSValueUrl (text, start, pos, prevQuote, prevUrl))))
+            {
+                --N;
+                continue;
+            }
+
+            commentExpression = commentEndExpression;
+            res = true;
+        }
+        else
+        {
+            commentExpression = commentStartExpression;
+            res = false;
+        }
+    }
+
+    return res;
+}
+/*************************/
+// Also formats quotations.
+int Highlighter::isQuotedInCSSValue (const QString &text,
+                                     const int valueStart,
+                                     const int index,
+                                     int prevQuote,
+                                     bool prevUrl)
+{
+    if (index < 0 || valueStart < 0 || index < valueStart)
+        return 0;
+    //if (format (index) == quoteFormat)
+        //return ?;
+    if (format (index) == altQuoteFormat)
+        return 0;
+
+    int res; // 1 for single quote, 2 for double quote
+    int N;
+    QRegularExpression quoteExpression;
+    if (prevQuote > 0 && valueStart == 0)
+    {
+        if (prevQuote == 1)
+        {
+            res = 1;
+            quoteExpression = singleQuoteMark;
+        }
+        else
+        {
+            res = 2;
+            quoteExpression = quoteMark;
+        }
+        N = 1;
+    }
+    else
+    {
+        quoteExpression = mixedQuoteMark;
+        res = 0;
+        N = 0;
+    }
+    int pos = valueStart - 1;
+    int start = 0;
+    int nxtPos;
+    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
+    {
+        ++N;
+        if (nxtPos >= index)
+        {
+            if (N % 2 == 0)
+            {
+                if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                    res = 2;
+                else
+                    res = 1;
+                setFormat (start, nxtPos - start + 1, quoteFormat);
+            }
+            else res = 0;
+            break;
+        }
+
+        if (N % 2 != 0)
+        {
+            /* a start quote inside a comment or value URL */
+            if (isCSSCommented (text, QList<int>() << valueStart, nxtPos, prevQuote, prevUrl)
+                || isInsideCSSValueUrl (text, valueStart, nxtPos, prevQuote, prevUrl))
+            {
+                --N;
+                pos = nxtPos;
+                continue;
+            }
+
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                res = 2;
+            else
+                res = 1;
+            start = nxtPos;
+        }
+        else
+        {
+            res = 0;
+            setFormat (start, nxtPos - start + 1, quoteFormat);
+        }
+
+        /* determine the next quotation mark */
+        if (N % 2 != 0)
+        {
+            if (text.at (nxtPos) == quoteMark.pattern().at (0))
+                quoteExpression = quoteMark;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+        else
+            quoteExpression = mixedQuoteMark;
+
+        pos = nxtPos;
+    }
+    if (nxtPos == -1 && N % 2 != 0)
+        setFormat (start, text.length() - start, quoteFormat);
+
+    return res;
+}
+/*************************/
+/* FIXME: This is temporary solution for url("...") and url('...')
+          and only works with whole URLs in a line. */
+static inline bool isWholeCSSdUrl (const QString &text, const int start, int &length)
+{
+    int indx = start + 4; // "url("
+    while (indx < start + length && text.at (indx).isSpace())
+        ++ indx;
+    if (indx < start + length)
+    {
+        if (text.at (indx) == '\'')
+        {
+            int end = text.indexOf ('\'', indx + 1);
+            if (end == -1) return false;
+            if (end >= start + length)
+            {
+                end = text.indexOf (')', end + 1);
+                if (end == -1) return false;
+                length = end - start + 1;
+            }
+        }
+        else if (text.at (indx) == '\"')
+        {
+            int end = text.indexOf ('\"', indx + 1);
+            if (end == -1) return false;
+            if (end >= start + length)
+            {
+                end = text.indexOf (')', end + 1);
+                if (end == -1) return false;
+                length = end - start + 1;
+            }
+        }
+    }
+    return true;
+}
+
+// Also formats URLs.
+bool Highlighter::isInsideCSSValueUrl (const QString &text,
+                                       const int valueStart,
+                                       const int index,
+                                       int prevQuote,
+                                       bool prevUrl)
+{
+    if (index < 0 || valueStart < 0 || index < valueStart)
+        return false;
+    if (format (index) == altQuoteFormat)
+        return true;
+    if (format (index) == quoteFormat)
+        return false;
+
+    int indx;
+    if (valueStart == 0 && prevUrl) // prevQuote is 0
+    {
+        /* format the first URL completely */
+        indx = text.indexOf (QRegularExpression ("\\)"));
+        int endIndx;
+        if (indx == -1) endIndx = text.length();
+        else endIndx = indx + 1;
+        setFormat (0, endIndx, altQuoteFormat);
+
+        if (indx == -1 || indx >= index)
+            return true;
+        return isInsideCSSValueUrl (text, indx + 1, index);
+    }
+
+    /* format whole URLs up to index */
+    QRegularExpressionMatch match;
+    static const QRegularExpression cssUrl ("\\burl\\([^\\)]*\\)");
+    int urlIndx = text.indexOf (cssUrl, valueStart, &match);
+    while (urlIndx < index
+           && (isCSSCommented (text, QList<int>() << valueStart, urlIndx, prevQuote, prevUrl)
+               || isQuotedInCSSValue (text, valueStart, urlIndx, prevQuote, prevUrl) > 0))
+    {
+        urlIndx = text.indexOf (cssUrl, urlIndx + 1, &match);
+    }
+    int L;
+    while (urlIndx > -1 && urlIndx < index)
+    {
+        L = match.capturedLength();
+        if (!isWholeCSSdUrl (text, urlIndx, L))
+        {
+            setFormat (urlIndx, text.length() - urlIndx, altQuoteFormat);
+            return true;
+        }
+        setFormat (urlIndx, L, altQuoteFormat);
+        if (urlIndx + L > index)
+            return true;
+        if (urlIndx + L == index)
+            return false;
+        urlIndx = text.indexOf (cssUrl, urlIndx + L, &match);
+        while (urlIndx < index
+               && (isCSSCommented (text, QList<int>() << valueStart, urlIndx, prevQuote, prevUrl)
+                   || isQuotedInCSSValue (text, valueStart, urlIndx, prevQuote, prevUrl) > 0))
+        {
+            urlIndx = text.indexOf (cssUrl, urlIndx + 1, &match);
+        }
+    }
+
+    static const QRegularExpression cssOpenUrl ("\\burl\\([^\\)]*$");
+    const QString txt = text.left (index);
+    indx = txt.indexOf (cssOpenUrl, valueStart);
+    while (isCSSCommented (text, QList<int>() << valueStart, indx, prevQuote, prevUrl)
+           || isQuotedInCSSValue (text, valueStart, indx, prevQuote, prevUrl) > 0)
+    {
+        indx = txt.indexOf (cssOpenUrl, indx + 1);
+    }
+    if (indx == -1) return false;
+
+    /* also, format this URL completely if it's open */
+    if (text.indexOf (')', indx) == -1)
+        setFormat (indx, text.length() - indx, altQuoteFormat);
+
+    return true;
+}
+/*************************/
+// This formats attribute selectors with "quoteFormat" to skip start
+// comment sings in multiLineComment().
+// It is supposed that the section between "start" and "pos" is
+// outside all values (because values can't contain attribute selectors).
+void Highlighter::formatAttrSelectors (const QString &text, const int start , const int pos)
+{
+    if (pos <= start) return;
+    static const QRegularExpression attrSelector ("\\[[^\\]]*(?=\\]|$)");
+    QRegularExpressionMatch match;
+    int indx = start;
+    while ((indx = text.indexOf (attrSelector, indx, &match)) > -1 && indx <= pos)
+    {
+        if (format (indx+1) == quoteFormat) // a precaution (shouldn't be needed)
+            return;
+        while (isCSSCommented (text, QList<int>() << start << start, indx))
+            indx = text.indexOf (attrSelector, indx + 1, &match);
+        if (indx == -1) break;
+        setFormat (indx + 1, match.capturedLength() - 1, quoteFormat);
+        indx += match.capturedLength();
+    }
+}
+/*************************/
+// Multi-line attribute selectors aren't considered.
+// It is supposed that the section between "start" and "pos" is
+// outside all values (because values can't contain attribute selectors).
+bool Highlighter::isInsideAttrSelector (const QString &text, const int start, const int pos)
+{
+    if (pos <= start) return false;
+    if (format (pos) == quoteFormat) return true;
+    static const QRegularExpression attrSelectorStart ("\\[[^\\]]*$");
+    int indx = text.left (pos).indexOf (attrSelectorStart, start);
+    if (indx > -1 && !isCSSCommented (text, QList<int>() << start << start, indx))
+        return true;
+    return false;
+}
+/*************************/
+// This should come before multiline comments highlighting.
+// It also highlights quotes and URLs inside CSS values.
+void Highlighter::cssHighlighter (const QString &text, bool mainFormatting, const int start)
+{
+    /* NOTE: Since we need to know whether the previous value had an open quote or an
+             open URL, we use the "OpenNests" variable to not add another one just for
+             this case. Although it isn't intended for such a case, it can be safely
+             used with values "1", "2" and "3" because it isn't used anywhere else
+             with CSS or HTML. The next block will be rehighlighted at highlightBlock()
+             (after "cssHighlighter (text, mainFormatting);") if it's changed. */
+
+    /**************************
+     * (Multiline) CSS Blocks *
+     **************************/
+
+    QRegularExpressionMatch cssStartMatch;
+    QRegularExpression cssStartExpression ("\\{");
+    QRegularExpressionMatch cssEndtMatch;
+    QRegularExpression cssEndExpression ("\\}");
+
+    /* it's supposed that a property can only contain letters, numbers, underlines and dashes */
+    static const QRegularExpression cssValueStartExp ("(?<=^|\\{|;|\\s)[A-Za-z0-9_\\-]+\\s*:(?!:)");
+    static const QRegularExpression cssValueEndExp (";|\\}");
+
+    int blockStartIndex = start;
+    int blockEndIndex = start;
+
+    int valueStartIndex;
+    int valueEndIndex;
+
+    QList<int> valueRegions;
+
+    QTextCharFormat cssValueFormat;
+    cssValueFormat.setFontItalic (true);
+    cssValueFormat.setForeground (Verda);
+
+
+    int prevQuote = 0;
+    bool prevUrl = false;
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+        {
+            if (prevData->openNests() == 1)
+                prevQuote = 1; // single quote
+            else if (prevData->openNests() == 2)
+                prevQuote = 2; // double quote
+            else if (prevData->openNests() == 3)
+                prevUrl = true;
+        }
+    }
+
+    int prevState = previousBlockState();
+    if (blockStartIndex > 0
+        || (prevState != cssBlockState
+            && prevState != cssValueState
+            && prevState != commentInCssBlockState
+            && prevState != commentInCssValueState))
+    {
+        blockStartIndex = text.indexOf (cssStartExpression, start, &cssStartMatch);
+        while (isCSSCommented (text, QList<int>() << start << start, blockStartIndex)
+               || isInsideAttrSelector (text, start, blockStartIndex))
+        {
+            blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + 1, &cssStartMatch);
+        }
+        if (blockStartIndex == -1)
+            formatAttrSelectors (text, start, text.length());
+    }
+
+    while (blockStartIndex >= 0)
+    {
+        formatAttrSelectors (text, blockEndIndex, blockStartIndex);
+
+        int realBlockStart;
+        /* when the css block starts in the previous line
+           and the search for its end has just begun... */
+        if ((prevState == cssBlockState
+             || prevState == cssValueState // subset of cssBlockState
+             || prevState == commentInCssBlockState
+             || prevState == commentInCssValueState)
+            && blockStartIndex == 0)
+        {
+            /* ... search for its end from the line start */
+            realBlockStart = 0;
+        }
+        else
+            realBlockStart = blockStartIndex + cssStartMatch.capturedLength();
+        blockEndIndex = text.indexOf (cssEndExpression, realBlockStart, &cssEndtMatch);
+
+        if (blockEndIndex == -1)
+        {
+            /* temporarily, to find value regions and format
+               their quotes and URLs in the following loop */
+            blockEndIndex = text.length();
+        }
+
+        /* see if the end brace should be skipped after
+           finding CSS value regions up to this point */
+        QList<int> regions;
+        valueStartIndex = realBlockStart;
+        QRegularExpressionMatch match;
+        if (realBlockStart > 0
+            || (valueStartIndex == 0
+                && prevState != cssValueState
+                && prevState != commentInCssValueState))
+        {
+            valueStartIndex = text.indexOf (cssValueStartExp, realBlockStart, &match);
+            while (isCSSCommented (text, QList<int>() << realBlockStart << realBlockStart, valueStartIndex)
+                   || isInsideAttrSelector (text, realBlockStart, valueStartIndex))
+            {
+                valueStartIndex = text.indexOf (cssValueStartExp, valueStartIndex + match.capturedLength(), &match);
+            }
+            if (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
+                formatAttrSelectors (text, realBlockStart, valueStartIndex);
+        }
+        while (blockEndIndex > -1)
+        {
+            while (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
+            {
+                /**************************
+                 * (Multiline) CSS Values *
+                 **************************/
+
+                valueStartIndex += match.capturedLength();
+                regions << valueStartIndex;
+                if (valueStartIndex == 0
+                    && (prevState == cssValueState
+                        || prevState == commentInCssValueState))
+                { // first loop
+                    valueEndIndex = text.indexOf (cssValueEndExp, 0, &cssEndtMatch);
+                    while (valueEndIndex > -1
+                           && (isCSSCommented (text, QList<int>() << 0, valueEndIndex, prevQuote, prevUrl)
+                               || isQuotedInCSSValue (text, 0, valueEndIndex, prevQuote, prevUrl) > 0
+                               || isInsideCSSValueUrl (text, 0, valueEndIndex, prevQuote, prevUrl)))
+                    {
+                        valueEndIndex = text.indexOf (cssValueEndExp, valueEndIndex + cssEndtMatch.capturedLength(), &cssEndtMatch);
+                    }
+                }
+                else
+                {
+                    valueEndIndex = text.indexOf (cssValueEndExp, valueStartIndex, &cssEndtMatch);
+                    while (valueEndIndex > -1
+                           && (isCSSCommented (text, QList<int>() << valueStartIndex, valueEndIndex)
+                               || isQuotedInCSSValue (text, valueStartIndex, valueEndIndex) > 0
+                               || isInsideCSSValueUrl (text, valueStartIndex, valueEndIndex)))
+                    {
+                        valueEndIndex = text.indexOf (cssValueEndExp, valueEndIndex + cssEndtMatch.capturedLength(), &cssEndtMatch);
+                    }
+                }
+
+                if (valueEndIndex > -1)
+                {
+                    regions << valueEndIndex;
+                    valueStartIndex = text.indexOf (cssValueStartExp, valueEndIndex + cssEndtMatch.capturedLength(), &match);
+                    while (isCSSCommented (text, QList<int>() << valueEndIndex << valueEndIndex, valueStartIndex)
+                           || isInsideAttrSelector (text, valueEndIndex, valueStartIndex))
+                    {
+                        valueStartIndex = text.indexOf (cssValueStartExp, valueStartIndex + match.capturedLength(), &match);
+                    }
+                    if (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
+                        formatAttrSelectors (text, valueEndIndex, valueStartIndex);
+                }
+                else
+                {
+                    int q = isQuotedInCSSValue (text, valueStartIndex, text.length(), prevQuote, prevUrl);
+                    if (q > 0)
+                    {
+                        if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                            data->insertNestInfo (q);
+                    }
+                    else if (isInsideCSSValueUrl (text, valueStartIndex, text.length(), prevQuote, prevUrl))
+                    {
+                        if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                            data->insertNestInfo (3);
+                    }
+                    valueStartIndex = -1; // exit the loop
+                }
+            }
+
+            if (blockEndIndex == text.length())
+            { // value regions are found and their quotes and URLs are formatted
+                blockEndIndex = -1;
+                break;
+            }
+            if (regions.size() % 2 != 0 // quoted or inside a URL
+                || (!regions.isEmpty() && (regions.last() > blockEndIndex + 1 // quoted or inside a URL
+                                           || isCSSCommented (text, regions, blockEndIndex, prevQuote, prevUrl
+                                           || isInsideAttrSelector (text, regions.last(), blockEndIndex))))
+                || (regions.isEmpty() && (isCSSCommented (text, QList<int>() << realBlockStart << realBlockStart, blockEndIndex)
+                                          || isInsideAttrSelector (text, realBlockStart, blockEndIndex))))
+            {
+                blockEndIndex = text.indexOf (cssEndExpression, blockEndIndex + 1, &cssEndtMatch);
+                if (blockEndIndex == -1 && valueStartIndex > -1)
+                    blockEndIndex = text.length();  // to find the remaining value regions and format their quotes and URLs
+            }
+            else break;
+        }
+
+        if (mainFormatting)
+            valueRegions << regions;
+
+        int cssLength;
+        if (blockEndIndex == -1)
+        {
+            blockEndIndex = text.length();
+            if (regions.size() % 2 != 0)
+                setCurrentBlockState (cssValueState);
+            else
+                setCurrentBlockState (cssBlockState);
+            cssLength = text.length() - blockStartIndex;
+        }
+        else
+        {
+            cssLength = blockEndIndex - blockStartIndex
+                        + cssEndtMatch.capturedLength();
+        }
+
+        if (regions.isEmpty())
+            formatAttrSelectors (text, realBlockStart, blockEndIndex);
+        else if (regions.size() % 2 == 0)
+            formatAttrSelectors (text, regions.last(), blockEndIndex);
+
+        /* at first, we suppose all syntax is wrong (but comment
+           start signs have "quoteFormat" inside attribute selectors) */
+        setFormatWithoutOverwrite (realBlockStart, blockEndIndex - realBlockStart, neutralFormat, quoteFormat);
+
+        if (mainFormatting)
+        {
+            /* css property format (before :...;) */
+            QTextCharFormat cssPropFormat;
+            cssPropFormat.setFontItalic (true);
+            cssPropFormat.setForeground (Blue);
+            static const QRegularExpression cssProp ("(?<=^|\\{|;|\\s)[A-Za-z0-9_\\-]+(?=\\s*(?<!:):(?!:))");
+            int indxTmp = text.indexOf (cssProp, realBlockStart, &match);
+            while (format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat)
+                indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
+            while (indxTmp >= 0 && indxTmp < blockEndIndex)
+            {
+                setFormat (indxTmp, match.capturedLength(), cssPropFormat);
+                indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
+                while (format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat)
+                    indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
+            }
+        }
+
+        blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + cssLength, &cssStartMatch);
+        while (isCSSCommented (text, QList<int>() << blockEndIndex << blockEndIndex, blockStartIndex)
+               || isInsideAttrSelector (text, blockEndIndex, blockStartIndex))
+        {
+            blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + 1, &cssStartMatch);
+        }
+
+        if (blockStartIndex == -1)
+            formatAttrSelectors (text, blockEndIndex, text.length());
+    }
+
+    /*******************
+     * Main Formatting *
+     *******************/
+
+    if (mainFormatting)
+    {
+        for (int i = 0; i < valueRegions.size(); ++i)
+        {
+            int cssLength;
+            if (i % 2 != 0)
+            {
+                valueStartIndex = valueRegions.at (i - 1);
+                cssLength = valueRegions.at (i) - valueRegions.at (i - 1);
+            }
+            else
+            {
+                if (i == valueRegions.size() - 1)
+                {
+                    valueStartIndex = valueRegions.at (i);
+                    cssLength = text.length() - valueRegions.at (i);
+                }
+                else continue;
+            }
+
+            /* css value format (skips altQuoteFormat too) */
+            setFormatWithoutOverwrite (valueStartIndex, cssLength, cssValueFormat, quoteFormat);
+
+            /* numbers in css values */
+            QTextCharFormat numFormat;
+            numFormat.setFontItalic (true);
+            numFormat.setForeground (Brown);
+            QRegularExpressionMatch numMatch;
+            QRegularExpression numExpression ("(-|\\+){0,1}\\b\\d*\\.{0,1}\\d+");
+            int nIndex = text.indexOf (numExpression, valueStartIndex, &numMatch);
+            while (format (nIndex) == quoteFormat || format (nIndex) == altQuoteFormat)
+                nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
+            while (nIndex > -1
+                   && nIndex + numMatch.capturedLength() <= valueStartIndex + cssLength)
+            {
+                setFormat (nIndex, numMatch.capturedLength(), numFormat);
+                nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
+                while (format (nIndex) == quoteFormat || format (nIndex) == altQuoteFormat)
+                    nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
+            }
+        }
+
+        /* color value format (#xyz, #abcdef, #abcdefxy) */
+        QTextCharFormat cssColorFormat;
+        cssColorFormat.setForeground (Verda);
+        cssColorFormat.setFontWeight (QFont::Bold);
+        cssColorFormat.setFontItalic (true);
+        QRegularExpressionMatch match;
+        // previously: "#\\b([A-Za-z0-9]{3}){0,4}(?![A-Za-z0-9_]+)"
+        static const QRegularExpression colorValue ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
+        int indxTmp = text.indexOf (colorValue, start, &match);
+        while (format (indxTmp) == neutralFormat // an error
+               || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
+               || isCSSCommented (text, valueRegions, indxTmp))
+        {
+            indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
+        }
+        while (indxTmp >= 0)
+        {
+            setFormat (indxTmp, match.capturedLength(), cssColorFormat);
+            indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
+            while (format (indxTmp) == neutralFormat
+                   || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
+                   || isCSSCommented (text, valueRegions, indxTmp))
+            {
+                indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
+            }
+        }
+
+        /* definitions (starting with @) */
+        QTextCharFormat cssDefinitionFormat;
+        cssDefinitionFormat.setForeground (Brown);
+        static const  QRegularExpression cssDef ("(@[\\w-]+\\b)([^;]*(;|$))");
+        indxTmp = text.indexOf (cssDef, start, &match);
+        while (format (indxTmp) == neutralFormat // an error
+               || format (indxTmp) == cssValueFormat // inside a value
+               || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
+               || isCSSCommented (text, valueRegions, indxTmp))
+        {
+            indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength (1), &match);
+        }
+        while (indxTmp >= 0)
+        {
+            setFormat (indxTmp, match.capturedLength (1), cssDefinitionFormat);
+            indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength(), &match);
+            while (format (indxTmp) == neutralFormat
+                   || format (indxTmp) == cssValueFormat
+                   || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
+                   || isCSSCommented (text, valueRegions, indxTmp))
+            {
+                indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength (1), &match);
+            }
+        }
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-fountain.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-fountain.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-fountain.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-fountain.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,435 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+void Highlighter::fountainFonts (const QString &text)
+{
+    QTextCharFormat boldFormat = neutralFormat;
+    boldFormat.setFontWeight (QFont::Bold);
+
+    QTextCharFormat italicFormat = neutralFormat;
+    italicFormat.setFontItalic (true);
+
+    QTextCharFormat boldItalicFormat = italicFormat;
+    boldItalicFormat.setFontWeight (QFont::Bold);
+
+    QRegularExpressionMatch italicMatch, boldcMatch, expMatch;
+    static const QRegularExpression italicExp ("(?<!\\\\)\\*([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*");
+    static const QRegularExpression boldExp ("(?<!\\\\)\\*\\*([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*\\*");
+    static const QRegularExpression boldItalicExp ("(?<!\\\\)\\*{3}([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*{3}");
+
+    const QRegularExpression exp (boldExp.pattern() + "|" + italicExp.pattern() + "|" + boldItalicExp.pattern());
+
+    int index = 0;
+    while ((index = text.indexOf (exp, index, &expMatch)) > -1)
+    {
+        if (format (index) == mainFormat && format (index + expMatch.capturedLength() - 1) == mainFormat)
+        {
+            if (index == text.indexOf (boldItalicExp, index))
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+            }
+            else if (index == text.indexOf (boldExp, index, &boldcMatch) && boldcMatch.capturedLength() == expMatch.capturedLength())
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldFormat, whiteSpaceFormat);
+                /* also format italic bold strings */
+                QString str = text.mid (index + 2, expMatch.capturedLength() - 4);
+                int indx = 0;
+                while ((indx = str.indexOf (italicExp, indx, &italicMatch)) > -1)
+                {
+                    setFormatWithoutOverwrite (index + 2 + indx, italicMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+                    indx += italicMatch.capturedLength();
+                }
+            }
+            else
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), italicFormat, whiteSpaceFormat);
+                /* also format bold italic strings */
+                QString str = text.mid (index + 1, expMatch.capturedLength() - 2);
+                int indx = 0;
+                while ((indx = str.indexOf (boldExp, indx, &boldcMatch)) > -1)
+                {
+                    setFormatWithoutOverwrite (index + 1 + indx, boldcMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+                    indx += boldcMatch.capturedLength();
+                }
+
+            }
+            index += expMatch.capturedLength();
+        }
+        else ++index;
+    }
+
+    /* format underlines */
+    static const QRegularExpression under ("(?<!\\\\)_([^_]|(?:(?<=\\\\)_))+(?<!\\\\|\\s)_");
+    index = 0;
+    while ((index = text.indexOf (under, index, &expMatch)) > -1)
+    {
+        QTextCharFormat fi = format (index);
+        if (fi == commentFormat || fi == altQuoteFormat)
+            ++index;
+        else
+        {
+            int count = expMatch.capturedLength();
+            fi = format (index + count - 1);
+            if (fi != commentFormat && fi != altQuoteFormat)
+            {
+                int start = index;
+                int indx;
+                while (start < index + count)
+                {
+                    fi = format (start);
+                    while (start < index + count
+                           && (fi == whiteSpaceFormat || fi == commentFormat || fi == altQuoteFormat))
+                    {
+                        ++ start;
+                        fi = format (start);
+                    }
+                    if (start < index + count)
+                    {
+                        indx = start;
+                        fi = format (indx);
+                        while (indx < index + count
+                               && fi != whiteSpaceFormat && fi != commentFormat && fi != altQuoteFormat)
+                        {
+                            fi.setFontUnderline (true);
+                            setFormat (indx, 1 , fi);
+                            ++ indx;
+                            fi = format (indx);
+                        }
+                        start = indx;
+                    }
+                }
+            }
+            index += count;
+        }
+    }
+}
+/*************************/
+// Completely commented lines are considered blank.
+// It's also supposed that spaces don't affect blankness.
+bool Highlighter::isFountainLineBlank (const QTextBlock &block)
+{
+    if (!block.isValid()) return false;
+    QString text = block.text();
+    if (block.previous().isValid())
+    {
+        if (block.previous().userState() == markdownBlockQuoteState)
+            return false;
+        if (block.previous().userState() == commentState)
+        {
+            int indx = text.indexOf (commentEndExpression);
+            if (indx == -1 || indx == text.length() - 2)
+                return true;
+            text = text.right (text.length() - indx - 2);
+        }
+    }
+    int index = 0;
+    while (index < text.length())
+    {
+        while (index < text.length() && text.at (index).isSpace())
+            ++ index;
+        if (index == text.length()) break; // only spaces
+        text = text.right (text.length() - index);
+        if (!text.startsWith ("/*")) return false;
+        index = 2;
+
+        index = text.indexOf (commentEndExpression, index);
+        if (index == -1) break;
+        index += 2;
+    }
+    return true;
+}
+/*************************/
+static inline bool isUpperCase (const QString & text)
+{ // this isn't the same as QSting::isUpper()
+    bool res = true;
+    for (int i = 0; i < text.length(); ++i)
+    {
+        const QChar thisChar = text.at (i);
+        if (thisChar.isLetter() && !thisChar.isUpper())
+        {
+            res = false;
+            break;
+        }
+    }
+    return res;
+}
+
+void Highlighter::highlightFountainBlock (const QString &text)
+{
+    bool rehighlightPrevBlock = false;
+
+    TextBlockData *data = new TextBlockData;
+    setCurrentBlockUserData (data);
+    setCurrentBlockState (0);
+
+    QTextCharFormat fi;
+
+    static const QRegularExpression leftNoteBracket ("\\[\\[");
+    static const QRegularExpression rightNoteBracket ("\\]\\]");
+    static const QRegularExpression heading ("^\\s*(INT|EXT|EST|INT./EXT|INT/EXT|I/E|int|ext|est|int./ext|int/ext|i/e|\\.\\w)");
+    static const QRegularExpression charRegex ("^\\s*@");
+    static const QRegularExpression parenRegex ("^\\s*\\(.*\\)$");
+    static const QRegularExpression lyricRegex ("^\\s*~");
+
+    /* notes */
+    multiLineComment (text, 0, leftNoteBracket, QRegularExpression ("^ ?$|\\]\\]"), markdownBlockQuoteState, altQuoteFormat);
+    /* boneyards (like a multi-line comment -- skips altQuoteFormat in notes with commentStartExpression) */
+    multiLineComment (text, 0, commentStartExpression, commentEndExpression, commentState, commentFormat);
+
+    QTextBlock prevBlock = currentBlock().previous();
+    QTextBlock nxtBlock = currentBlock().next();
+    if (isFountainLineBlank (currentBlock()))
+    {
+        if (currentBlockState() != commentState)
+            setCurrentBlockState (updateState); // to distinguish it
+        if (prevBlock.isValid()
+            && previousBlockState() != commentState && previousBlockState() != markdownBlockQuoteState
+            && (isUpperCase (prevBlock.text()) || prevBlock.text().indexOf (charRegex) == 0
+                || text.indexOf (heading) == 0))
+        {
+            rehighlightPrevBlock = true;
+        }
+    }
+    else
+    {
+        if (prevBlock.isValid() && previousBlockState() != codeBlockState
+            && (isUpperCase (prevBlock.text()) || prevBlock.text().indexOf (charRegex) == 0
+                || text.indexOf (heading) == 0))
+        {
+            rehighlightPrevBlock = true;
+        }
+
+        QTextCharFormat fFormat;
+        /* scene headings (between blank lines) */
+        if (previousBlockState() == updateState && isFountainLineBlank (nxtBlock)
+            && text.indexOf (heading) == 0)
+        {
+            fFormat.setFontWeight (QFont::Bold);
+            fFormat.setForeground (Blue);
+            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
+        }
+        /* characters (following a blank line and not preceding one) */
+        else if (previousBlockState() == updateState
+                 && nxtBlock.isValid() && !isFountainLineBlank (nxtBlock)
+                 && (text.indexOf (charRegex) == 0 || isUpperCase (text)))
+        {
+            fFormat.setFontWeight (QFont::Bold);
+            fFormat.setForeground (DarkBlue);
+            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
+            if (currentBlockState() != commentState && currentBlockState() != markdownBlockQuoteState)
+                setCurrentBlockState (codeBlockState); // to distinguish it
+        }
+        /* transitions (between blank lines) */
+        else if (previousBlockState() == updateState && isFountainLineBlank (nxtBlock)
+                 && ((text.indexOf (QRegularExpression ("^\\s*>")) == 0
+                      && text.indexOf (QRegularExpression ("<$")) == -1) // not centered
+                     || (isUpperCase (text) && text.endsWith ("TO:"))))
+        {
+            fFormat.setFontWeight (QFont::Bold);
+            fFormat.setForeground (DarkMagenta);
+            fFormat.setFontItalic (true);
+            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
+        }
+        else
+        {
+            if (previousBlockState() == codeBlockState
+                && currentBlockState() != commentState  && currentBlockState() != markdownBlockQuoteState)
+            {
+                setCurrentBlockState (codeBlockState); // to distinguish it for parentheticals
+            }
+            /* parentheticals (following characters or dialogs) */
+            if (text.indexOf (parenRegex) == 0 && previousBlockState() == codeBlockState)
+            {
+                fFormat.setFontWeight (QFont::Bold);
+                fFormat.setForeground (DarkGreen);
+                setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
+            }
+            /* lyrics */
+            else if (text.indexOf (lyricRegex) == 0)
+            {
+                fFormat.setFontItalic (true);
+                fFormat.setForeground (DarkMagenta);
+                setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
+            }
+        }
+    }
+
+    int index;
+
+    /* main formatting */
+    int bn = currentBlock().blockNumber();
+    if (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber())
+    {
+        data->setHighlighted();
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            if (rule.format == commentFormat)
+                continue;
+            QRegularExpressionMatch match;
+            index = text.indexOf (rule.pattern, 0, &match);
+            if (rule.format != whiteSpaceFormat)
+            {
+                fi = format (index);
+                while (index >= 0 && fi != mainFormat)
+                {
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    fi = format (index);
+                }
+            }
+            while (index >= 0)
+            {
+                int length = match.capturedLength();
+                setFormat (index, length, rule.format);
+                index = text.indexOf (rule.pattern, index + length, &match);
+
+                if (rule.format != whiteSpaceFormat)
+                {
+                    fi = format (index);
+                    while (index >= 0 && fi != mainFormat)
+                    {
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                        fi = format (index);
+                    }
+                }
+            }
+        }
+        fountainFonts (text);
+    }
+
+    /* left parenthesis */
+    index = text.indexOf ('(');
+    fi = format (index);
+    while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf (leftNoteBracket);
+    fi = format (index);
+    while (index >= 0 && fi != altQuoteFormat)
+    {
+        index = text.indexOf (leftNoteBracket, index + 2);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        info = new BracketInfo;
+        info->character = '[';
+        info->position = index + 1;
+        data->insertInfo (info);
+
+        index = text.indexOf (leftNoteBracket, index + 2);
+        fi = format (index);
+        while (index >= 0 && fi != altQuoteFormat)
+        {
+            index = text.indexOf (leftNoteBracket, index + 2);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (rightNoteBracket);
+    fi = format (index);
+    while (index >= 0 && fi != altQuoteFormat)
+    {
+        index = text.indexOf (rightNoteBracket, index + 2);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        info = new BracketInfo;
+        info->character = ']';
+        info->position = index + 1;
+        data->insertInfo (info);
+
+        index = text.indexOf (rightNoteBracket, index + 2);
+        fi = format (index);
+        while (index >= 0 && fi != altQuoteFormat)
+        {
+            index = text.indexOf (rightNoteBracket, index + 2);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+
+    if (rehighlightPrevBlock)
+    {
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, prevBlock));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter.h featherpad-1.0.1/featherpad/highlighter/highlighter.h
--- featherpad-0.17.1/featherpad/highlighter/highlighter.h	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter.h	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,381 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#ifndef HIGHLIGHTER_H
+#define HIGHLIGHTER_H
+
+#include <QSyntaxHighlighter>
+#include <QRegularExpression>
+
+namespace FeatherPad {
+
+struct ParenthesisInfo
+{
+    char character; // '(' or ')'
+    int position;
+};
+
+struct BraceInfo
+{
+    char character; // '{' or '}'
+    int position;
+};
+
+struct BracketInfo
+{
+    char character; // '[' or ']'
+    int position;
+};
+
+
+/* This class gathers all the information needed for
+   highlighting the syntax of the current block. */
+class TextBlockData : public QTextBlockUserData
+{
+public:
+    TextBlockData() :
+        Highlighted (false),
+        Property (false),
+        LastState (0),
+        OpenNests (0),
+        LastFormattedQuote (0),
+        LastFormattedRegex (0) {}
+    ~TextBlockData();
+
+    QVector<ParenthesisInfo *> parentheses() const;
+    QVector<BraceInfo *> braces() const;
+    QVector<BracketInfo *> brackets() const;
+    QString labelInfo() const;
+    bool isHighlighted() const;
+    bool getProperty() const;
+    int lastState() const;
+    int openNests() const;
+    int lastFormattedQuote() const;
+    int lastFormattedRegex() const;
+    QSet<int> openQuotes() const;
+
+    void insertInfo (ParenthesisInfo *info);
+    void insertInfo (BraceInfo *info);
+    void insertInfo (BracketInfo *info);
+    void insertInfo (const QString &str);
+    void setHighlighted();
+    void setProperty (bool p);
+    void setLastState (int state);
+    void insertNestInfo (int nests);
+    void insertLastFormattedQuote (int last);
+    void insertLastFormattedRegex (int last);
+    void insertOpenQuotes (const QSet<int> &openQuotes);
+
+private:
+    QVector<ParenthesisInfo *> allParentheses;
+    QVector<BraceInfo *> allBraces;
+    QVector<BracketInfo *> allBrackets;
+    QString label; // A label (can be a delimiter string, like that of a here-doc).
+    bool Highlighted; // Is this block completely highlighted?
+    bool Property; // A general boolean property (used with SH, Perl and YAML).
+    int LastState; // The state of this block before it is highlighted (again).
+    /* "Nest" is a generalized bracket. This variable
+       is the number of unclosed nests in a block. */
+    int OpenNests;
+    /* "LastFormattedQuote" is used when quotes are formatted
+       on the fly, before they are completely formatted. */
+    int LastFormattedQuote;
+    int LastFormattedRegex;
+    QSet<int> OpenQuotes; // The numbers of open double quotes of open nests.
+};
+/*************************/
+/* This is a tricky but effective way for syntax highlighting. */
+class Highlighter : public QSyntaxHighlighter
+{
+    Q_OBJECT
+
+public:
+    Highlighter (QTextDocument *parent, const QString& lang,
+                 const QTextCursor &start, const QTextCursor &end,
+                 bool darkColorScheme,
+                 bool showWhiteSpace,
+                 bool showEndings,
+                 int whitespaceValue,
+                 const QHash<QString, QColor> &syntaxColors = QHash<QString, QColor>());
+    ~Highlighter();
+
+    void setLimit (const QTextCursor &start, const QTextCursor &end) {
+        startCursor = start;
+        endCursor = end;
+    }
+
+protected:
+    void highlightBlock (const QString &text);
+
+private:
+    QStringList keywords (const QString &lang);
+    QStringList types();
+    bool isEscapedChar (const QString &text, const int pos) const;
+    bool isEscapedQuote (const QString &text, const int pos, bool isStartQuote,
+                         bool skipCommandSign = false);
+    bool isQuoted (const QString &text, const int index,
+                   bool skipCommandSign = false, const int start = 0);
+    bool isPerlQuoted (const QString &text, const int index);
+    bool isJSQuoted (const QString &text, const int index);
+    bool isMLCommented (const QString &text, const int index, int comState = commentState,
+                        const int start = 0);
+    bool isHereDocument (const QString &text);
+    void pythonMLComment (const QString &text, const int indx);
+    void htmlCSSHighlighter (const QString &text, const int start = 0);
+    void htmlBrackets (const QString &text, const int start = 0);
+    void htmlJavascript (const QString &text);
+    bool isCSSCommented (const QString &text,
+                         const QList<int> &valueRegions,
+                         const int index,
+                         int prevQuote = 0,
+                         bool prevUrl = false);
+    int isQuotedInCSSValue (const QString &text,
+                            const int valueStart,
+                            const int index,
+                            int prevQuote = 0,
+                            bool prevUrl = false);
+    bool isInsideCSSValueUrl (const QString &text,
+                              const int valueStart,
+                              const int index,
+                              int prevQuote = 0,
+                              bool prevUrl = false);
+    void formatAttrSelectors (const QString &text, const int start, const int pos);
+    bool isInsideAttrSelector (const QString &text, const int pos, const int start);
+    void cssHighlighter (const QString &text, bool mainFormatting, const int start = 0);
+    void singleLineComment (const QString &text, const int start);
+    bool multiLineComment (const QString &text,
+                           const int index,
+                           const QRegularExpression &commentStartExp, const QRegularExpression &commentEndExp,
+                           const int commState,
+                           const QTextCharFormat &comFormat);
+    bool textEndsWithBackSlash (const QString &text);
+    bool multiLineQuote (const QString &text,
+                         const int start = 0,
+                         int comState = commentState);
+    void multiLinePerlQuote(const QString &text);
+    void multiLineJSlQuote (const QString &text, const int start, int comState);
+    void xmlQuotes (const QString &text);
+    void setFormatWithoutOverwrite (int start,
+                                    int count,
+                                    const QTextCharFormat &newFormat,
+                                    const QTextCharFormat &oldFormat);
+    /* SH specific methods: */
+    void SH_MultiLineQuote(const QString &text);
+    bool SH_SkipQuote (const QString &text, const int pos, bool isStartQuote);
+    int formatInsideCommand (const QString &text,
+                             const int minOpenNests, int &nests, QSet<int> &quotes,
+                             const bool isHereDocStart, const int index);
+    bool SH_CmndSubstVar (const QString &text,
+                          TextBlockData *currentBlockData,
+                          int oldOpenNests, const QSet<int> &oldOpenQuotes);
+
+    void debControlFormatting (const QString &text);
+
+    bool isEscapedRegex (const QString &text, const int pos);
+    bool isEscapedPerlRegex (const QString &text, const int pos);
+    bool isEscapedRegexEndSign (const QString &text, const int start, const int pos,
+                                bool ignoreClasses = false) const;
+    bool isInsideRegex (const QString &text, const int index);
+    bool isInsidePerlRegex (const QString &text, const int index);
+    void multiLineRegex (const QString &text, const int index);
+    void multiLinePerlRegex (const QString &text);
+    int findDelimiter (const QString &text, const int index,
+                       const QRegularExpression &delimExp, int &capturedLength) const;
+
+    /* Markdown */
+    bool markdownMultiLine (const QString &text,
+                            const QString &oldStartPattern,
+                            const QRegularExpression &startExp, const QRegularExpression &endExp,
+                            const int state,
+                            const QTextCharFormat &txtFormat);
+    void markdownFonts (const QString &text);
+    void highlightMarkdownBlock (const QString &text);
+
+    /* Yaml */
+    bool isYamlKeyQuote (const QString &key, const int pos);
+    bool yamlOpenBraces (const QString &text,
+                         const QRegularExpression &startExp, const QRegularExpression &endExp,
+                         int oldOpenNests, bool oldProperty,
+                         bool setData);
+    void yamlLiteralBlock (const QString &text);
+    void highlightYamlBlock (const QString &text);
+
+    /* reST */
+    void reSTMainFormatting (int start, const QString &text);
+    void highlightReSTBlock (const QString &text);
+
+    /* Fountain */
+    void fountainFonts (const QString &text);
+    bool isFountainLineBlank (const QTextBlock &block);
+    void highlightFountainBlock (const QString &text);
+
+    void latexFormula (const QString &text);
+
+    /* Pascal */
+    bool isPascalQuoted (const QString &text, const int index,
+                         const int start = 0) const;
+    bool isPascalMLCommented (const QString &text, const int index,
+                              const int start = 0) const;
+    void singleLinePascalComment (const QString &text, const int start = 0);
+    void pascalQuote (const QString &text, const int start = 0);
+    void multiLinePascalComment (const QString &text);
+
+    /* Java */
+    bool isEscapedJavaQuote (const QString &text, const int pos,
+                             bool isStartQuote) const;
+    bool isJavaSingleCommentQuoted (const QString &text, const int index,
+                                    const int start) const;
+    bool isJavaStartQuoteMLCommented (const QString &text, const int index,
+                                      const int start = 0) const;
+    void JavaQuote (const QString &text, const int start = 0);
+    void singleLineJavaComment (const QString &text, const int start = 0);
+    void multiLineJavaComment (const QString &text);
+    void javaMainFormatting (const QString &text);
+    void javaBraces (const QString &text);
+
+    /* Json */
+    void highlightJsonBlock (const QString &text);
+    void jsonKey (const QString &text, const int start,
+                  int &K, int &V, int &B,
+                  bool &insideValue, QString &braces);
+    void jsonValue (const QString &text, const int start,
+                    int &K, int &V, int &B,
+                    bool &insideValue, QString &braces);
+
+    /* Ruby */
+    bool isEscapedRubyRegex (const QString &text, const int pos);
+    int findRubyDelimiter (const QString &text, const int index,
+                           const QRegularExpression &delimExp, int &capturedLength) const;
+    bool isInsideRubyRegex (const QString &text, const int index);
+    void multiLineRubyRegex (const QString &text);
+
+    struct HighlightingRule
+    {
+        QRegularExpression pattern;
+        QTextCharFormat format;
+    };
+    QVector<HighlightingRule> highlightingRules;
+
+    QRegularExpression hereDocDelimiter;
+
+    /* Multiline comments: */
+    QRegularExpression commentStartExpression;
+    QRegularExpression commentEndExpression;
+
+    QRegularExpression htmlCommetStart, htmlCommetEnd;
+    QRegularExpression htmlSubcommetStart, htmlSubcommetEnd; // For CSS and JS inside HTML
+
+    QTextCharFormat mainFormat; // The format before highlighting.
+    QTextCharFormat neutralFormat; // When a color near that of mainFormat is needed.
+    QTextCharFormat commentFormat;
+    QTextCharFormat commentBoldFormat;
+    QTextCharFormat noteFormat;
+    QTextCharFormat quoteFormat; // Usually for double quote.
+    QTextCharFormat altQuoteFormat; // Usually for single quote.
+    QTextCharFormat urlInsideQuoteFormat;
+    QTextCharFormat urlFormat;
+    QTextCharFormat blockQuoteFormat;
+    QTextCharFormat codeBlockFormat;
+    QTextCharFormat whiteSpaceFormat; // For whitespaces.
+    QTextCharFormat translucentFormat;
+    QTextCharFormat regexFormat;
+    QTextCharFormat errorFormat;
+
+    /* Programming language: */
+    QString progLan;
+
+    QRegularExpression quoteMark, singleQuoteMark, backQuote, mixedQuoteMark, mixedQuoteBackquote;
+    QRegularExpression xmlLt, xmlGt;
+    QColor Blue, DarkBlue, Red, DarkRed, Verda, DarkGreen, DarkGreenAlt, Magenta, DarkMagenta, Violet, Brown, DarkYellow;
+
+    /* The start and end cursors of the visible text: */
+    QTextCursor startCursor, endCursor;
+
+    bool multilineQuote_;
+    bool mixedQuotes_;
+
+    static const QRegularExpression urlPattern;
+    static const QRegularExpression notePattern;
+
+    /* Block states: */
+    enum
+    {
+        commentState = 1,
+
+        /* Next-line commnets (ending back-slash in c/c++): */
+        nextLineCommentState,
+
+        /* Quotation marks: */
+        doubleQuoteState,
+        singleQuoteState,
+
+        SH_DoubleQuoteState,
+        SH_SingleQuoteState,
+        SH_MixedDoubleQuoteState,
+        SH_MixedSingleQuoteState,
+
+        /* Python comments: */
+        pyDoubleQuoteState,
+        pySingleQuoteState,
+
+        xmlValueState,
+
+        /* Markdown: */
+        markdownBlockQuoteState,
+
+        /* Markdown and reStructuredText */
+        codeBlockState,
+
+        /* JavaScript template literals */
+        JS_templateLiteralState,
+
+        /* Regex inside JavaScript, QML and Perl: */
+        regexSearchState, // search and replace (only in Perl)
+        regexState,
+        regexExtraState, /* JS: The line ends with a JS regex (+ spaces); or
+                            Perl: A Perl quoting operator isn't complete. */
+
+        /* HTML: */
+        htmlBracketState,
+        htmlStyleState,
+        htmlStyleDoubleQuoteState,
+        htmlStyleSingleQuoteState,
+        htmlCSSState,
+        htmlCSSCommentState,
+        htmlJavaState,
+        htmlJavaCommentState,
+
+        /* CSS: */
+        cssBlockState,
+        commentInCssBlockState,
+        commentInCssValueState,
+        cssValueState,
+
+        /* Used to update the format of the next line (as in JavaScript): */
+        updateState,
+
+        endState // 30
+
+        /* For here-docs, state >= endState or state < -1. */
+    };
+};
+
+}
+
+#endif // HIGHLIGHTER_H
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-html.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-html.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-html.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-html.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,729 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+// This should be called before "htmlCSSHighlighter()" and "htmlJavascript()".
+void Highlighter::htmlBrackets (const QString &text, const int start)
+{
+    if (progLan != "html") return;
+
+    /*****************************
+     * (Multiline) HTML Brackets *
+     *****************************/
+
+    int braIndex = start;
+    int indx = 0;
+    QRegularExpressionMatch startMatch;
+    static const QRegularExpression braStartExp ("<(?!\\!)/{0,1}[A-Za-z0-9_\\-]+");
+    QRegularExpressionMatch endMatch;
+    static const QRegularExpression braEndExp (">");
+    static const QRegularExpression styleExp ("<(style|STYLE)$|<(style|STYLE)\\s+[^>]*");
+    bool isStyle (false);
+    QTextCharFormat htmlBraFormat;
+    htmlBraFormat.setFontWeight (QFont::Bold);
+    htmlBraFormat.setForeground (Violet);
+
+    int prevState = previousBlockState();
+    if (braIndex > 0
+        || (prevState != singleQuoteState && prevState != doubleQuoteState
+            && (prevState < htmlBracketState || prevState > htmlStyleSingleQuoteState)))
+    {
+        braIndex = text.indexOf (braStartExp, start, &startMatch);
+        while (format (braIndex) == commentFormat || format (braIndex) == urlFormat)
+            braIndex = text.indexOf (braStartExp, braIndex + 1, &startMatch);
+        if (braIndex > -1)
+        {
+            indx = text.indexOf (styleExp, start);
+            while (format (indx) == commentFormat || format (indx) == urlFormat)
+                indx = text.indexOf (styleExp, indx + 1);
+            isStyle = indx > -1 && braIndex == indx;
+        }
+    }
+    else if (braIndex == 0 && (prevState == htmlStyleState
+                               /* these quote states are set only with styles */
+                               || prevState == htmlStyleSingleQuoteState
+                               || prevState == htmlStyleDoubleQuoteState))
+    {
+        isStyle = true;
+    }
+
+    int bn = currentBlock().blockNumber();
+    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
+    //bool hugeText (text.length() > 50000);
+    int firstBraIndex = braIndex; // to check progress in the following loop
+    while (braIndex >= 0)
+    {
+        /*if (hugeText)
+        {
+            setFormat (braIndex, text.length() - braIndex, translucentFormat);
+            break;
+        }*/
+        int braEndIndex;
+
+        int matched = 0;
+        if (braIndex == 0
+            && (prevState == singleQuoteState || prevState == doubleQuoteState
+                || (prevState >= htmlBracketState && prevState <= htmlStyleSingleQuoteState)))
+        {
+            braEndIndex = text.indexOf (braEndExp, 0, &endMatch);
+        }
+        else
+        {
+            matched = startMatch.capturedLength();
+            braEndIndex = text.indexOf (braEndExp,
+                                        braIndex + matched,
+                                        &endMatch);
+        }
+
+        int len;
+        if (braEndIndex == -1)
+        {
+            len = text.length() - braIndex;
+            if (isStyle)
+                setCurrentBlockState (htmlStyleState);
+            else
+                setCurrentBlockState (htmlBracketState);
+        }
+        else
+        {
+            len = braEndIndex - braIndex
+                  + endMatch.capturedLength();
+        }
+
+        if (matched > 0)
+            setFormat (braIndex, matched, htmlBraFormat);
+        if (braEndIndex > -1)
+            setFormat (braEndIndex, endMatch.capturedLength(), htmlBraFormat);
+
+
+        int endLimit;
+        if (braEndIndex == -1)
+            endLimit = text.length();
+        else
+            endLimit = braEndIndex;
+
+        /***************************
+         * (Multiline) HTML Quotes *
+         ***************************/
+
+        int quoteIndex = braIndex;
+        QRegularExpressionMatch quoteMatch;
+        QRegularExpression quoteExpression = mixedQuoteMark;
+        int quote = doubleQuoteState;
+
+        /* find the start quote */
+        if (braIndex > firstBraIndex // when we're in another bracket
+            || (prevState != doubleQuoteState
+                && prevState != singleQuoteState
+                && prevState != htmlStyleSingleQuoteState
+                && prevState != htmlStyleDoubleQuoteState))
+        {
+            quoteIndex = text.indexOf (quoteExpression, braIndex);
+
+            /* if the start quote is found... */
+            if (quoteIndex >= braIndex && quoteIndex <= endLimit)
+            {
+                /* ... distinguish between double and single quotes */
+                if (text.at (quoteIndex) == quoteMark.pattern().at (0))
+                {
+                    quoteExpression = quoteMark;
+                    quote = currentBlockState() == htmlStyleState ? htmlStyleDoubleQuoteState
+                                                                  : doubleQuoteState;
+                }
+                else
+                {
+                    quoteExpression = singleQuoteMark;
+                    quote = currentBlockState() == htmlStyleState ? htmlStyleSingleQuoteState
+                                                                  : singleQuoteState;
+                }
+            }
+        }
+        else // but if we're inside a quotation...
+        {
+            /* ... distinguish between the two quote kinds
+               by checking the previous line */
+            quote = prevState;
+            if (quote == doubleQuoteState || quote == htmlStyleDoubleQuoteState)
+                quoteExpression = quoteMark;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+
+        while (quoteIndex >= braIndex && quoteIndex <= endLimit)
+        {
+            /* if the search is continued... */
+            if (quoteExpression == mixedQuoteMark)
+            {
+                /* ... distinguish between double and single quotes
+                   again because the quote mark may have changed */
+                if (text.at (quoteIndex) == quoteMark.pattern().at (0))
+                {
+                    quoteExpression = quoteMark;
+                    quote = currentBlockState() == htmlStyleState ? htmlStyleDoubleQuoteState
+                                                                  : doubleQuoteState;
+                }
+                else
+                {
+                    quoteExpression = singleQuoteMark;
+                    quote = currentBlockState() == htmlStyleState ? htmlStyleSingleQuoteState
+                                                                  : singleQuoteState;
+                }
+            }
+
+            int quoteEndIndex = text.indexOf (quoteExpression, quoteIndex + 1, &quoteMatch);
+            if (quoteIndex == braIndex
+                && (prevState == doubleQuoteState
+                    || prevState == singleQuoteState
+                    || prevState == htmlStyleSingleQuoteState
+                    || prevState == htmlStyleDoubleQuoteState))
+            {
+                quoteEndIndex = text.indexOf (quoteExpression, braIndex, &quoteMatch);
+            }
+
+            int Matched = 0;
+            if (quoteEndIndex == -1)
+            {
+                if (braEndIndex > -1) quoteEndIndex = braEndIndex;
+            }
+            else
+            {
+                if (quoteEndIndex > endLimit)
+                    quoteEndIndex = endLimit;
+                else
+                    Matched = quoteMatch.capturedLength();
+            }
+
+            int quoteLength;
+            if (quoteEndIndex == -1)
+            {
+                if (currentBlockState() == htmlBracketState
+                    || currentBlockState() == htmlStyleState)
+                {
+                    setCurrentBlockState (quote);
+                }
+                quoteLength = text.length() - quoteIndex;
+            }
+            else
+                quoteLength = quoteEndIndex - quoteIndex
+                              + Matched;
+            setFormat (quoteIndex, quoteLength, quoteExpression == quoteMark ? quoteFormat
+                                                                             : altQuoteFormat);
+
+            /* the next quote may be different */
+            quoteExpression = mixedQuoteMark;
+            quoteIndex = text.indexOf (quoteExpression, quoteIndex + quoteLength);
+        }
+
+        /*******************************
+         * (Multiline) HTML Attributes *
+         *******************************/
+
+        if (mainFormatting)
+        {
+            QTextCharFormat htmlAttributeFormat;
+            htmlAttributeFormat.setFontItalic (true);
+            htmlAttributeFormat.setForeground (Brown);
+            QRegularExpressionMatch attMatch;
+            static const QRegularExpression attExp ("[A-Za-z0-9_\\-]+(?=\\s*\\=)");
+            int attIndex = text.indexOf (attExp, braIndex, &attMatch);
+            QTextCharFormat fi = format (attIndex);
+            while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+            {
+                attIndex += attMatch.capturedLength();
+                fi = format (attIndex);
+                while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+                {
+                    ++ attIndex;
+                    fi = format (attIndex);
+                }
+                attIndex = text.indexOf (attExp, attIndex, &attMatch);
+                fi = format (attIndex);
+            }
+            while (attIndex >= braIndex && attIndex < endLimit)
+            {
+                setFormat (attIndex, attMatch.capturedLength(), htmlAttributeFormat);
+                attIndex = text.indexOf(attExp, attIndex + attMatch.capturedLength(), &attMatch);
+                fi = format (attIndex);
+                while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+                {
+                    attIndex += attMatch.capturedLength();
+                    fi = format (attIndex);
+                    while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+                    {
+                        ++ attIndex;
+                        fi = format (attIndex);
+                    }
+                    attIndex = text.indexOf (attExp, attIndex, &attMatch);
+                    fi = format (attIndex);
+                }
+            }
+        }
+
+        indx = braIndex + len;
+        braIndex = text.indexOf (braStartExp, braIndex + len, &startMatch);
+        while (format (braIndex) == commentFormat || format (braIndex) == urlFormat)
+            braIndex = text.indexOf (braStartExp, braIndex + 1, &startMatch);
+        if (braIndex > -1)
+        {
+            indx = text.indexOf (styleExp, indx);
+            while (format (indx) == commentFormat || format (indx) == urlFormat)
+                indx = text.indexOf (styleExp, indx + 1);
+            isStyle = indx > -1 && braIndex == indx;
+        }
+        else isStyle = false;
+    }
+
+    /* at last, format whitespaces */
+    if (mainFormatting)
+    {
+        static_cast<TextBlockData *>(currentBlock().userData())->setHighlighted(); // completely highlighted
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            if (rule.format == whiteSpaceFormat)
+            {
+                QRegularExpressionMatch match;
+                int index = text.indexOf (rule.pattern, start, &match);
+                while (index >= 0)
+                {
+                    setFormat (index, match.capturedLength(), rule.format);
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                }
+
+                /* also, mark encoded and unencoded ampersands */
+                QRegularExpression ampersand ("&");
+                QTextCharFormat encodedFormat;
+                encodedFormat.setForeground (DarkMagenta);
+                encodedFormat.setFontItalic (true);
+                QTextCharFormat specialFormat = encodedFormat;
+                specialFormat.setFontWeight (QFont::Bold);
+
+                index = text.indexOf (ampersand, start);
+                while (index >= 0 && format (index) != mainFormat)
+                    index = text.indexOf (ampersand, index + 1);
+                while (index >= 0)
+                {
+                    QString str = text.mid (index, 6);
+                    if (str == " ")
+                    {
+                        setFormat (index, 6, specialFormat);
+                        index = text.indexOf (ampersand, index + 6);
+                    }
+                    else if (str.startsWith("&"))
+                    {
+                        setFormat (index, 5, specialFormat);
+                        index = text.indexOf (ampersand, index + 5);
+                    }
+                    else if (str.startsWith ("<") || str.startsWith (">"))
+                    {
+                        setFormat (index, 4, specialFormat);
+                        index = text.indexOf (ampersand, index + 4);
+                    }
+                    else
+                    {
+                        str = text.mid (index);
+                        if (str.indexOf(QRegularExpression("^&(#[0-9]+|[a-zA-Z]+[a-zA-Z0-9_:\\.\\-]*|#[xX][0-9a-fA-F]+);"), 0, &match) > -1)
+                        { // accept "&name;", "&number;" and "&hexadecimal;" but format them differently
+                            setFormat (index, match.capturedLength(), encodedFormat);
+                            index = text.indexOf (ampersand, index + match.capturedLength());
+                        }
+                        else
+                        {
+                            setFormat (index, 1, errorFormat);
+                            index = text.indexOf (ampersand, index + 1);
+                        }
+                    }
+                    while (index >= 0 && format (index) != mainFormat)
+                        index = text.indexOf (ampersand, index + 1);
+                }
+
+                break;
+            }
+        }
+    }
+}
+/*************************/
+void Highlighter::htmlCSSHighlighter (const QString &text, const int start)
+{
+    if (progLan != "html") return;
+
+    int cssIndex = start;
+
+    QRegularExpressionMatch startMatch;
+    static const QRegularExpression cssStartExp ("<(style|STYLE)>|<(style|STYLE)\\s+[^>]*>");
+    QRegularExpressionMatch endMatch;
+    static const QRegularExpression cssEndExp ("</(style|STYLE)\\s*>");
+    QRegularExpressionMatch braMatch;
+    static const QRegularExpression braEndExp (">");
+
+    /* switch to css temporarily */
+    commentStartExpression = htmlSubcommetStart;
+    commentEndExpression = htmlSubcommetEnd;
+    progLan = "css";
+
+    bool wasCSS (false);
+    int prevState = previousBlockState();
+    bool wasStyle (prevState == htmlStyleState
+                   || prevState == htmlStyleSingleQuoteState
+                   || prevState == htmlStyleDoubleQuoteState);
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            wasCSS = prevData->labelInfo() == "CSS"; // it's labeled below
+    }
+
+    QTextCharFormat fi;
+    int matched = 0;
+    if ((!wasCSS || start > 0)  && !wasStyle)
+    {
+        cssIndex = text.indexOf (cssStartExp, start, &startMatch);
+        fi = format (cssIndex);
+        while (cssIndex >= 0
+               && (fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            cssIndex = text.indexOf (cssStartExp, cssIndex + startMatch.capturedLength(), &startMatch);
+            fi = format (cssIndex);
+        }
+    }
+    else if (wasStyle)
+    {
+        cssIndex = text.indexOf (braEndExp, start, &braMatch);
+        fi = format (cssIndex);
+        while (cssIndex >= 0
+               && (fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            cssIndex = text.indexOf (braEndExp, cssIndex + 1, &braMatch);
+            fi = format (cssIndex);
+        }
+        if (cssIndex > -1)
+            matched = braMatch.capturedLength(); // 1
+    }
+    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
+    int bn = currentBlock().blockNumber();
+    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
+    while (cssIndex >= 0)
+    {
+        /* single-line style bracket (<style ...>) */
+        if (matched == 0 && (!wasCSS || cssIndex > 0))
+            matched = startMatch.capturedLength();
+
+        /* starting from here, clear all html formats...
+           (NOTE: "mainFormat" is used instead of "neutralFormat"
+           for HTML ampersands to be formatted correctly.) */
+        setFormat (cssIndex + matched, text.length() - cssIndex - matched, mainFormat);
+        setCurrentBlockState (0);
+
+        /* ... and apply the css formats */
+        cssHighlighter (text, mainFormatting, cssIndex + matched);
+        multiLineComment (text,
+                          cssIndex + matched,
+                          commentStartExpression, commentEndExpression,
+                          htmlCSSCommentState,
+                          commentFormat);
+        if (mainFormatting)
+        {
+            for (const HighlightingRule &rule : qAsConst (highlightingRules))
+            { // CSS doesn't have any main formatting except for witesapces
+                if (rule.format == whiteSpaceFormat)
+                {
+                    QRegularExpressionMatch match;
+                    int index = text.indexOf (rule.pattern, start, &match);
+                    while (index >= 0)
+                    {
+                        setFormat (index, match.capturedLength(), rule.format);
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    }
+                }
+            }
+        }
+
+        /* now, search for the end of the css block */
+        int cssEndIndex;
+        if (cssIndex == 0 && wasCSS)
+            cssEndIndex = text.indexOf (cssEndExp, 0, &endMatch);
+        else
+        {
+            cssEndIndex = text.indexOf (cssEndExp,
+                                        cssIndex + matched,
+                                        &endMatch);
+        }
+
+        fi = format (cssEndIndex);
+        while (cssEndIndex > -1
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat))
+        {
+            cssEndIndex = text.indexOf (cssEndExp, cssEndIndex + endMatch.capturedLength(), &endMatch);
+            fi = format (cssEndIndex);
+        }
+
+        int len;
+        if (cssEndIndex == -1)
+        {
+            if (currentBlockState() == 0)
+                setCurrentBlockState (htmlCSSState); // for updating the next line
+            /* Since the next line couldn't be processed based on the state of this line,
+               we label this line to show that it's written in css and not html. */
+            curData->insertInfo ("CSS");
+            len = text.length() - cssIndex;
+        }
+        else
+        {
+            len = cssEndIndex - cssIndex
+                  + endMatch.capturedLength();
+            /* if the css block ends at this line, format
+               the rest of the line as an html code again */
+            setFormat (cssEndIndex, text.length() - cssEndIndex, mainFormat);
+            setCurrentBlockState (0);
+            progLan = "html";
+            commentStartExpression = htmlCommetStart;
+            commentEndExpression = htmlCommetEnd;
+            htmlBrackets (text, cssEndIndex);
+            commentStartExpression = htmlSubcommetStart;
+            commentEndExpression = htmlSubcommetEnd;
+            progLan = "css";
+        }
+
+        cssIndex = text.indexOf (cssStartExp, cssIndex + len, &startMatch);
+        fi = format (cssIndex);
+        while (cssIndex >= 0
+               && (fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            cssIndex = text.indexOf (cssStartExp, cssIndex + startMatch.capturedLength(), &startMatch);
+            fi = format (cssIndex);
+        }
+        matched = 0; // single-line style bracket (<style ...>)
+    }
+
+    /* revert to html */
+    progLan = "html";
+    commentStartExpression = htmlCommetStart;
+    commentEndExpression = htmlCommetEnd;
+}
+/*************************/
+void Highlighter::htmlJavascript (const QString &text)
+{
+    if (progLan != "html") return;
+
+    int javaIndex = 0;
+
+    QRegularExpressionMatch startMatch;
+    //QRegularExpression javaStartExp ("<(script|SCRIPT)\\s+[^<>]*(((language|LANGUAGE)\\s*\\=\\s*\"\\s*)|((TYPE|type)\\s*\\=\\s*\"\\s*(TEXT|text)/))(JavaScript|javascript)\\s*\"[^<>]*>");
+    static const QRegularExpression javaStartExp ("<(script|SCRIPT)\\s*>|<(script|SCRIPT)\\s+[^<>]*>");
+    QRegularExpressionMatch endMatch;
+    static const QRegularExpression javaEndExp ("</(script|SCRIPT)\\s*>");
+
+    /* switch to javascript temporarily */
+    commentStartExpression = htmlSubcommetStart;
+    commentEndExpression = htmlSubcommetEnd;
+    progLan = "javascript";
+    multilineQuote_ = true; // needed alongside progLan
+
+    bool wasJavascript (false);
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            wasJavascript = prevData->labelInfo() == "JS"; // it's labeled below
+    }
+
+    QTextCharFormat fi;
+    if (!wasJavascript)
+    {
+        javaIndex = text.indexOf (javaStartExp, 0, &startMatch);
+        fi = format (javaIndex);
+        while (javaIndex >= 0
+               && (fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            javaIndex = text.indexOf (javaStartExp, javaIndex + startMatch.capturedLength(), &startMatch);
+            fi = format (javaIndex);
+        }
+    }
+    int matched = 0;
+    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
+    int bn = currentBlock().blockNumber();
+    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
+    while (javaIndex >= 0)
+    {
+        if (!wasJavascript || javaIndex > 0)
+        {
+            matched = startMatch.capturedLength();
+            curData->insertLastFormattedQuote (javaIndex + matched);
+            curData->insertLastFormattedRegex (javaIndex + matched);
+        }
+
+        /* starting from here, clear all html formats... */
+        setFormat (javaIndex + matched, text.length() - javaIndex - matched, mainFormat);
+        setCurrentBlockState (0);
+
+        /* ... and apply the javascript formats */
+        singleLineComment (text, javaIndex + matched);
+        /* javascript single-line comment doesn't comment out
+           the end of a javascript block inside HTML */
+        int tmpIndx = -1;
+        if (currentBlockState() == regexExtraState)
+        {
+            tmpIndx = javaIndex + matched;
+            while (tmpIndx < text.length() && format (tmpIndx) != commentFormat)
+                ++ tmpIndx;
+            tmpIndx = text.indexOf (javaEndExp, tmpIndx);
+        }
+        if (tmpIndx > -1)
+        {
+            setCurrentBlockState (0);
+            setFormat (tmpIndx, text.length() - tmpIndx, mainFormat);
+            QString txt = text.left (tmpIndx);
+            multiLineQuote (txt, javaIndex + matched, htmlJavaCommentState);
+            multiLineComment (txt,
+                              javaIndex + matched,
+                              commentStartExpression, commentEndExpression,
+                              htmlJavaCommentState,
+                              commentFormat);
+            multiLineRegex (txt, javaIndex + matched);
+        }
+        else
+        {
+            multiLineQuote (text, javaIndex + matched, htmlJavaCommentState);
+            multiLineComment (text,
+                              javaIndex + matched,
+                              commentStartExpression, commentEndExpression,
+                              htmlJavaCommentState,
+                              commentFormat);
+            multiLineRegex (text, javaIndex + matched);
+        }
+        if (mainFormatting)
+        {
+            for (const HighlightingRule &rule : qAsConst (highlightingRules))
+            {
+                if (rule.format == commentFormat)
+                    continue;
+
+                QRegularExpressionMatch match;
+                int index = text.indexOf (rule.pattern, javaIndex + matched, &match);
+                if (rule.format != whiteSpaceFormat)
+                {
+                    fi = format (index);
+                    while (index >= 0
+                           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                               || fi == commentFormat || fi == urlFormat
+                               || fi ==  regexFormat))
+                    {
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                        fi = format (index);
+                    }
+                }
+
+                while (index >= 0)
+                {
+                    setFormat (index, match.capturedLength(), rule.format);
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+
+                    if (rule.format != whiteSpaceFormat)
+                    {
+                        fi = format (index);
+                        while (index >= 0
+                               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                                   || fi == commentFormat || fi == urlFormat
+                                   || fi == regexFormat))
+                        {
+                            index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                            fi = format (index);
+                        }
+                    }
+                }
+            }
+        }
+
+        /* now, search for the end of the javascript block */
+        int javaEndIndex;
+        if (javaIndex == 0 && wasJavascript)
+            javaEndIndex = text.indexOf (javaEndExp, 0, &endMatch);
+        else
+        {
+            javaEndIndex = text.indexOf (javaEndExp,
+                                         javaIndex + matched,
+                                         &endMatch);
+        }
+
+        fi = format (javaEndIndex);
+        while (javaEndIndex > -1
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            javaEndIndex = text.indexOf (javaEndExp, javaEndIndex + endMatch.capturedLength(), &endMatch);
+            fi = format (javaEndIndex);
+        }
+
+        int len;
+        if (javaEndIndex == -1)
+        {
+            if (currentBlockState() == 0)
+                setCurrentBlockState (htmlJavaState); // for updating the next line
+            /* Since the next line couldn't be processed based on the state of this line,
+               we label this line to show that it's written in javascript and not html. */
+            curData->insertInfo ("JS");
+            len = text.length() - javaIndex;
+        }
+        else
+        {
+            len = javaEndIndex - javaIndex
+                  + endMatch.capturedLength();
+            /* if the javascript block ends at this line,
+               format the rest of the line as an html code again */
+            setFormat (javaEndIndex, text.length() - javaEndIndex, mainFormat);
+            setCurrentBlockState (0);
+            progLan = "html";
+            multilineQuote_ = false;
+            commentStartExpression = htmlCommetStart;
+            commentEndExpression = htmlCommetEnd;
+            htmlBrackets (text, javaEndIndex);
+            htmlCSSHighlighter (text, javaEndIndex);
+            commentStartExpression = htmlSubcommetStart;
+            commentEndExpression = htmlSubcommetEnd;
+            progLan = "javascript";
+            multilineQuote_ = true;
+        }
+
+        javaIndex = text.indexOf (javaStartExp, javaIndex + len, &startMatch);
+        fi = format (javaEndIndex);
+        while (javaIndex > -1
+               && (fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            javaIndex = text.indexOf (javaStartExp, javaIndex + startMatch.capturedLength(), &startMatch);
+            fi = format (javaEndIndex);
+        }
+    }
+
+    /* revert to html */
+    progLan = "html";
+    multilineQuote_ = false;
+    commentStartExpression = htmlCommetStart;
+    commentEndExpression = htmlCommetEnd;
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-java.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-java.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-java.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-java.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,697 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+bool Highlighter::isEscapedJavaQuote (const QString &text, const int pos,
+                                      bool isStartQuote) const
+{
+    if (pos <= 0) return false;
+    if (isStartQuote)
+    { // the literal double quote character can be written as '"' or '\"'
+        return (pos + 1 < text.length() && text.at (pos + 1) == '\''
+                && (text.at (pos - 1) == '\''
+                    || (pos - 2 >= 0 && text.at (pos - 1) == '\\'
+                        && text.at (pos - 2) == '\'')));
+    }
+    int i = 0;
+    while (pos - i > 0 && text.at (pos - i - 1) == '\\')
+        ++i;
+    return (i % 2 != 0);
+}
+/*************************/
+bool Highlighter::isJavaSingleCommentQuoted (const QString &text, const int index,
+                                             const int start) const
+{
+    if (index < 0 || start < 0 || index < start)
+        return false;
+
+    int pos = start - 1;
+
+    bool res = false;
+    int N;
+    if (pos == -1)
+    {
+        if (previousBlockState() != doubleQuoteState)
+            N = 0;
+        else
+        {
+            N = 1;
+            res = true;
+        }
+    }
+    else N = 0; // a new search from the last position
+
+    int nxtPos;
+    while ((nxtPos = text.indexOf (quoteMark, pos + 1)) >= 0)
+    {
+        /* skip formatted comments */
+        QTextCharFormat fi = format (nxtPos);
+        if (fi == commentFormat || fi == urlFormat
+            || fi == commentBoldFormat || fi == regexFormat)
+        {
+            pos = nxtPos;
+            continue;
+        }
+
+        ++N;
+        if ((N % 2 == 0 // an escaped end quote...
+             && isEscapedJavaQuote (text, nxtPos, false))
+            || (N % 2 != 0 // ... or an escaped start quote
+                && isEscapedJavaQuote (text, nxtPos, true)))
+        {
+            --N;
+            pos = nxtPos;
+            continue;
+        }
+
+        if (index < nxtPos)
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        /* "pos" might be negative next time */
+        if (N % 2 == 0) res = false;
+        else res = true;
+
+        pos = nxtPos;
+    }
+
+    return res;
+}
+/*************************/
+bool Highlighter::isJavaStartQuoteMLCommented (const QString &text, const int index,
+                                               const int start) const
+{
+    if (index < 0 || start < 0 || index < start)
+        return false;
+
+    bool res = false;
+    int pos = start - 1;
+    int N;
+    QRegularExpressionMatch commentMatch;
+    QRegularExpression commentExpression;
+    if (pos >= 0 || previousBlockState() != commentState)
+    {
+        N = 0;
+        commentExpression = commentStartExpression;
+    }
+    else
+    {
+        N = 1;
+        res = true;
+        commentExpression = commentEndExpression;
+    }
+
+    while ((pos = text.indexOf (commentExpression, pos + 1, &commentMatch)) >= 0)
+    {
+        /* skip formatted quotations */
+        QTextCharFormat fi = format (pos);
+        if (fi == quoteFormat || fi == urlInsideQuoteFormat)
+            continue;
+
+        ++N;
+
+        if (index < pos + (N % 2 == 0 ? commentMatch.capturedLength() : 0))
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        if (N % 2 != 0)
+        {
+            commentExpression = commentEndExpression;
+            res = true;
+        }
+        else
+        {
+            commentExpression = commentStartExpression;
+            res = false;
+        }
+    }
+
+    return res;
+}
+/*************************/
+// NOTE: Java has only double quotes.
+// Single quotes are just used for characters in javaMainFormatting().
+void Highlighter::JavaQuote (const QString &text, const int start)
+{
+    int index = start;
+    QRegularExpressionMatch quoteMatch;
+
+    /* find the start quote */
+    int prevState = previousBlockState();
+    if (prevState != doubleQuoteState || index > 0)
+    {
+        index = text.indexOf (quoteMark, index);
+        /* skip escaped start quotes and all comments */
+        while (isEscapedJavaQuote (text, index, true)
+               || isJavaStartQuoteMLCommented (text, index))
+        {
+            index = text.indexOf (quoteMark, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat) // single-line
+            index = text.indexOf (quoteMark, index + 1);
+    }
+
+    while (index >= 0)
+    {
+        int endIndex;
+        /* if there's no start quote ... */
+        if (index == 0 && prevState == doubleQuoteState)
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteMark, 0, &quoteMatch);
+        }
+        else // otherwise, search from the start quote
+            endIndex = text.indexOf (quoteMark, index + 1, &quoteMatch);
+
+        /* check if the end quote is escaped */
+        while (isEscapedJavaQuote (text, endIndex, false))
+            endIndex = text.indexOf (quoteMark, endIndex + 1, &quoteMatch);
+
+        /* multiline quotes need backslash */
+        if (endIndex == -1 && !textEndsWithBackSlash (text))
+            endIndex = text.length();
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (doubleQuoteState);
+            quoteLength = text.length() - index;
+        }
+        else
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength(); // 1 or 0 (open quotation without ending backslash)
+        setFormat (index, quoteLength, quoteFormat);
+
+        /* also format urls inside the quotation */
+        QString str = text.mid (index, quoteLength);
+        int urlIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+        {
+            setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+            urlIndex += urlMatch.capturedLength();
+        }
+
+        index = text.indexOf (quoteMark, index + quoteLength);
+        while (isEscapedJavaQuote (text, index, true)
+               || isJavaStartQuoteMLCommented (text, index, endIndex + 1))
+        {
+            index = text.indexOf (quoteMark, index + 1);
+        }
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteMark, index + 1);
+    }
+}
+/*************************/
+void Highlighter::singleLineJavaComment (const QString &text, const int start)
+{
+    for (const HighlightingRule &rule : qAsConst (highlightingRules))
+    {
+        if (rule.format == commentFormat)
+        {
+            int startIndex = qMax (start, 0);
+            startIndex = text.indexOf (rule.pattern, startIndex);
+            /* skip quoted comments (and, automatically, those inside multiline python comments) */
+            while (startIndex > -1
+                       /* check quote formats (only for multiLineJavaComment()) */
+                   && (format (startIndex) == quoteFormat
+                       || format (startIndex) == urlInsideQuoteFormat
+                       /* check whether the comment sign is quoted or inside regex */
+                       || isJavaSingleCommentQuoted (text, startIndex, qMax (start, 0))))
+            {
+                startIndex = text.indexOf (rule.pattern, startIndex + 1);
+            }
+            if (startIndex > -1)
+            {
+                int l = text.length();
+                setFormat (startIndex, l - startIndex, commentFormat);
+
+                /* also format urls and email addresses inside the comment */
+                QString str = text.mid (startIndex, l - startIndex);
+                int pIndex = 0;
+                QRegularExpressionMatch urlMatch;
+                while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+                {
+                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+                    pIndex += urlMatch.capturedLength();
+                }
+                /* format note patterns too */
+                pIndex = 0;
+                while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+                {
+                    if (format (pIndex + startIndex) != urlFormat)
+                        setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+                    pIndex += urlMatch.capturedLength();
+                }
+            }
+            break;
+        }
+    }
+}
+/*************************/
+void Highlighter::multiLineJavaComment (const QString &text)
+{
+    static const QRegularExpression javaDocTags ("@(author|deprecated|exception|param|return|see|serial|serialData|serialField|since|throws|version)|\\{@(code|docRoot|inheritDoc|link|linkplain|value)\\s[^\\}]*\\}");
+    static const QRegularExpression javaDocBracedTags ("\\{@(code|docRoot|inheritDoc|link|linkplain|value)\\s[^\\}]*\\}");
+    static const QRegularExpression descriptionEnd ("^\\s*\\**\\s*@(author|deprecated|exception|param|return|see|serial|serialData|serialField|since|throws|version)|\\.(?=\\s+|<br>|<p>|$)|<br>|<p>");
+    static const QRegularExpression htmlTags ("</?(a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdi|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|data|datalist|dd|del|details|dfn|dialog|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|main|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|picture|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|svg|table|tbody|td|template|textarea|tfoot|th|thead|time|title|tr|track|tt|u|ul|var|video|wbr)\\s*>");
+
+    int startIndex = 0;
+    bool description = false;
+
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+
+    int prevState = previousBlockState();
+    if (prevState != commentState)
+    {
+        startIndex = text.indexOf (commentStartExpression, startIndex, &startMatch);
+        /* skip quotations (all formatted to this point) */
+        QTextCharFormat fi = format (startIndex);
+        while (fi == quoteFormat || fi == urlInsideQuoteFormat)
+        {
+            startIndex = text.indexOf (commentStartExpression, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        /* skip single-line comments */
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            startIndex = -1;
+        if (startIndex >= 0 && text.length() > startIndex + 2 && text.at (startIndex + 2) == '*')
+            description = true;
+    }
+    else
+    {
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
+            if (prevData && prevData->getProperty())
+                description = true;
+        }
+    }
+
+    while (startIndex >= 0)
+    {
+        int endIndex;
+        /* when the comment start is in the prvious line
+           and the search for the comment end has just begun... */
+        if (prevState == commentState && startIndex == 0)
+            /* ... search for the comment end from the line start */
+            endIndex = text.indexOf (commentEndExpression, 0, &endMatch);
+        else
+            endIndex = text.indexOf (commentEndExpression,
+                                     startIndex + startMatch.capturedLength(),
+                                     &endMatch);
+
+        /* skip quotations (needed?) */
+        QTextCharFormat fi = format (endIndex);
+        while (fi == quoteFormat || fi == urlInsideQuoteFormat)
+        {
+            endIndex = text.indexOf (commentEndExpression, endIndex + 1, &endMatch);
+            fi = format (endIndex);
+        }
+
+        if (endIndex >= 0)
+        {
+            /* because multiline commnets weren't taken into account in
+               singleLineJavaComment(), that method should be used here again */
+            int badIndex = endIndex + endMatch.capturedLength();
+            bool hadSingleLineComment = false;
+            int i = 0;
+            for (i = badIndex; i < text.length(); ++i)
+            {
+                if (format (i) == commentFormat || format (i) == urlFormat)
+                {
+                    setFormat (i, text.length() - i, mainFormat);
+                    hadSingleLineComment = true;
+                    break;
+                }
+            }
+            singleLineJavaComment (text, badIndex);
+            /* because the previous single-line comment may have been
+               removed now, quotes should be checked again from its start */
+            if (hadSingleLineComment)
+                JavaQuote (text, i);
+        }
+
+        int commentLength;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (commentState);
+            commentLength = text.length() - startIndex;
+        }
+        else
+            commentLength = endIndex - startIndex
+                            + endMatch.capturedLength();
+        setFormat (startIndex, commentLength, commentFormat);
+
+        /* also find and format the description */
+        int indx = -1;
+        if (description)
+        {
+            indx = text.indexOf (descriptionEnd, startIndex);
+            if (indx > -1 && (endIndex == - 1 || indx < endIndex))
+                setFormat (startIndex, indx - startIndex, commentBoldFormat);
+            else
+            {
+                if (endIndex == -1)
+                {
+                    setFormat (startIndex, text.length() - startIndex, commentBoldFormat);
+                    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                        data->setProperty (true);
+                }
+                else
+                    setFormat (startIndex, endIndex - startIndex, commentBoldFormat);
+            }
+        }
+
+        /* highlight tags */
+        if (!description || indx > -1)
+        {
+            int i = !description ? startIndex : indx;
+            while ((i = text.indexOf (javaDocTags, i, &endMatch)) > -1 && i < startIndex + commentLength)
+            {
+                setFormat (i, endMatch.capturedLength(), regexFormat);
+                i += endMatch.capturedLength();
+            }
+        }
+        if (description)
+        {
+            if (indx == -1)
+                indx = startIndex + commentLength;
+            int i = startIndex;
+            while ((i = text.indexOf (javaDocBracedTags, i, &endMatch)) > -1 && i < indx)
+            {
+                setFormat (i, endMatch.capturedLength(), regexFormat);
+                i += endMatch.capturedLength();
+            }
+        }
+        indx = startIndex;
+        while ((indx = text.indexOf (htmlTags, indx, &endMatch)) > -1 && indx < startIndex + commentLength)
+        {
+            setFormat (indx, endMatch.capturedLength(), codeBlockFormat);
+            indx += endMatch.capturedLength();
+        }
+
+        /* format urls and email addresses inside the comment */
+        QString str = text.mid (startIndex, commentLength);
+        int pIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+        {
+            setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+        /* format note patterns too */
+        pIndex = 0;
+        while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+        {
+            if (format (pIndex + startIndex) != urlFormat)
+                setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+
+        startIndex = text.indexOf (commentStartExpression, startIndex + commentLength, &startMatch);
+
+        /* skip single-line comments and quotations again */
+        fi = format (startIndex);
+        while (fi == quoteFormat || fi == urlInsideQuoteFormat)
+        {
+            startIndex = text.indexOf (commentStartExpression, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            startIndex = -1;
+        if (startIndex >= 0 && text.length() > startIndex + 2 && text.at (startIndex + 2) == '*')
+            description = true;
+        else
+            description = false;
+    }
+}
+/*************************/
+void Highlighter::javaMainFormatting (const QString &text)
+{
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    if (data == nullptr) return;
+
+    int index;
+    QTextCharFormat fi;
+    data->setHighlighted(); // completely highlighted
+    for (const HighlightingRule &rule : qAsConst (highlightingRules))
+    {
+        /* single-line comments are already formatted */
+        if (rule.format == commentFormat)
+            continue;
+
+        QRegularExpressionMatch match;
+        index = text.indexOf (rule.pattern, 0, &match);
+        /* skip quotes and all comments */
+        if (rule.format != whiteSpaceFormat)
+        {
+            fi = format (index);
+            while (index >= 0
+                    && (fi == quoteFormat || fi == urlInsideQuoteFormat
+                        || fi == commentFormat || fi == urlFormat
+                        || fi == commentBoldFormat || fi== regexFormat || fi == codeBlockFormat))
+            {
+                index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                fi = format (index);
+            }
+        }
+
+        while (index >= 0)
+        {
+            int length = match.capturedLength();
+            setFormat (index, length, rule.format);
+
+            index = text.indexOf (rule.pattern, index + length, &match);
+            if (rule.format != whiteSpaceFormat)
+            {
+                fi = format (index);
+                while (index >= 0
+                        && (fi == quoteFormat || fi == urlInsideQuoteFormat
+                            || fi == commentFormat || fi == urlFormat
+                            || fi == commentBoldFormat || fi== regexFormat || fi == codeBlockFormat))
+                {
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    fi = format (index);
+                }
+            }
+        }
+    }
+}
+/*************************/
+void Highlighter::javaBraces (const QString &text)
+{
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    if (data == nullptr) return;
+
+    /* NOTE: "altQuoteFormat" is used for characters in javaMainFormatting(). */
+
+    /* left parenthesis */
+    int index = text.indexOf ('(');
+    QTextCharFormat fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == commentBoldFormat || fi== regexFormat))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == commentBoldFormat || fi== regexFormat))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-json.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-json.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-json.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-json.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,644 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+static const QRegularExpression startBraceOrBracket ("\\{|\\[");
+
+void Highlighter::jsonKey (const QString &text, const int start,
+                           int &K, int &V, int &B,
+                           bool &insideValue, QString &braces)
+{
+    static const QRegularExpression jsonKeyExp ("\\{|\\}|:|,|\"");
+    int index = text.indexOf (jsonKeyExp, start);
+    if (index >= 0)
+    {
+        setFormat (start, index - start, errorFormat);
+        if (text.at (index) == '{')
+        {
+            ++K;
+            braces += "{";
+            insideValue = false;
+            jsonKey (text, index + 1,
+                     K, V, B,
+                     insideValue, braces);
+        }
+        else if (text.at (index) == '}')
+        {
+            if (K > 0)
+            {
+                --K;
+                braces.chop (1);
+                if (K == 0) V = 0;
+                insideValue = V > 0;
+            }
+            if (K == 0)
+            { // search for a starting brace or bracket
+                ++ index;
+                int indx = text.indexOf (startBraceOrBracket, index);
+                if (indx > -1)
+                {
+                    setFormat (index, indx - index, errorFormat);
+                    ++K;
+                    if (text.at (indx) == '{')
+                    {
+                        braces += "{";
+                        jsonKey (text, indx + 1,
+                                 K, V, B,
+                                 insideValue, braces);
+                    }
+                    else
+                    { // consider a virtual key and serach in the value
+                        ++V;
+                        insideValue = true;
+                        ++B;
+                        braces += "v{[";
+                        jsonValue (text, indx + 1,
+                                   K, V, B,
+                                   insideValue, braces);
+                    }
+                }
+                else
+                    setFormat (index, text.length() - index, errorFormat);
+            }
+            else if (insideValue)
+            {
+                jsonValue (text, index + 1,
+                           K, V, B,
+                           insideValue, braces);
+            }
+            else
+            {
+                jsonKey (text, index + 1,
+                         K, V, B,
+                         insideValue, braces);
+            }
+        }
+        else if (text.at (index) == ':')
+        {
+            ++V;
+            insideValue = true;
+            jsonValue (text, index + 1,
+                       K, V, B,
+                       insideValue, braces);
+        }
+        else if (text.at (index) == ',')
+        {
+            jsonKey (text, index + 1,
+                     K, V, B,
+                     insideValue, braces);
+        }
+        else // double quote
+        {
+            int end = text.indexOf (quoteMark, index + 1);
+            while (isEscapedChar (text, end))
+                end = text.indexOf (quoteMark, end + 1);
+            if (end >= 0)
+            {
+                setFormat (index, end + 1 - index, quoteFormat);
+                jsonKey (text, end + 1,
+                         K, V, B,
+                         insideValue, braces);
+            }
+            else
+            {
+                setFormat (index, text.length() - index, quoteFormat);
+                setCurrentBlockState (doubleQuoteState);
+            }
+        }
+    }
+    else
+        setFormat (start, text.length() - start, errorFormat);
+}
+/*************************/
+void Highlighter::jsonValue (const QString &text, const int start,
+                             int &K, int &V, int &B,
+                             bool &insideValue, QString &braces)
+{
+    static const QRegularExpression jasonNumExp ("(?<=^|[^\\w\\d\\.])(\\+|-)?((\\d*\\.?\\d+|\\d+\\.)((e|E)(\\+|-)?\\d+)?)(?=[^\\w\\d\\.]|$)");
+    static const QRegularExpression jsonValueExp ("\\{|\\}|,|\"|\\[|\\]|\\b(true|false|null)\\b|" + jasonNumExp.pattern());
+    QRegularExpressionMatch match;
+    int index = text.indexOf (jsonValueExp, start, &match);
+    if (index >= 0)
+    {
+        setFormat (start, index - start, errorFormat);
+        if (text.at (index) == '{')
+        {
+            ++K;
+            braces += "{";
+            insideValue = false;
+            jsonKey (text, index + 1,
+                     K, V, B,
+                     insideValue, braces);
+        }
+        else if (text.at (index) == '}')
+        {
+            if (K > 0)
+            {
+                --K;
+                braces.chop (1);
+                if (K == 0) V = 0;
+                insideValue = V > 0;
+            }
+            if (K == 0)
+            { // search for a starting brace or bracket
+                ++ index;
+                int indx = text.indexOf (startBraceOrBracket, index);
+                if (indx > -1)
+                {
+                    setFormat (index, indx - index, errorFormat);
+                    ++K;
+                    if (text.at (indx) == '{')
+                    {
+                        braces += "{";
+                        jsonKey (text, indx + 1,
+                                 K, V, B,
+                                 insideValue, braces);
+                    }
+                    else
+                    { // consider a virtual key and serach in the value
+                        ++V;
+                        insideValue = true;
+                        ++B;
+                        braces += "v{[";
+                        jsonValue (text, indx + 1,
+                                   K, V, B,
+                                   insideValue, braces);
+                    }
+                }
+                else
+                    setFormat (index, text.length() - index, errorFormat);
+            }
+            else if (insideValue)
+            {
+                jsonValue (text, index + 1,
+                           K, V, B,
+                           insideValue, braces);
+            }
+            else
+            {
+                jsonKey (text, index + 1,
+                         K, V, B,
+                         insideValue, braces);
+            }
+        }
+        else if (text.at (index) == '[')
+        {
+            braces += "[";
+            ++B;
+            jsonValue (text, index + 1,
+                       K, V, B,
+                       insideValue, braces);
+        }
+        else if (text.at (index) == ']')
+        {
+            if (B > 0)
+            {
+                --B;
+                braces.chop (1);
+            }
+            if (B == 0
+                && braces.size() > 1
+                && braces.at (braces.size() - 1) == '{'
+                && braces.at (braces.size() - 2) == 'v')
+            { // we had considered a virtual key
+                K = 0;
+                V = 0;
+                insideValue = false;
+                braces.clear();
+                ++ index;
+                int indx = text.indexOf (startBraceOrBracket, index);
+                if (indx > -1)
+                {
+                    setFormat (index, indx - index, errorFormat);
+                    ++K;
+                    if (text.at (indx) == '{')
+                    {
+                        braces += "{";
+                        jsonKey (text, indx + 1,
+                                 K, V, B,
+                                 insideValue, braces);
+                    }
+                    else
+                    { // consider a virtual key again and serach in the value
+                        ++V;
+                        insideValue = true;
+                        ++B;
+                        braces += "v{[";
+                        jsonValue (text, indx + 1,
+                                   K, V, B,
+                                   insideValue, braces);
+                    }
+                }
+                else
+                    setFormat (index, text.length() - index, errorFormat);
+            }
+            else
+            {
+                jsonValue (text, index + 1,
+                           K, V, B,
+                           insideValue, braces);
+            }
+        }
+        else if (text.at (index) == ',')
+        {
+            if (V > 0) // inside a value and...
+            {
+                if (B == 0
+                    || (!braces.isEmpty() && braces.at (braces.size() - 1) == '{'))
+                { // ... either outside all brackets or immediately inside a pair of braces
+                    --V;
+                    insideValue = false;
+                    jsonKey (text, index + 1,
+                             K, V, B,
+                             insideValue, braces);
+                }
+                else
+                {
+                    jsonValue (text, index + 1,
+                               K, V, B,
+                               insideValue, braces);
+                }
+            }
+            else
+            {
+                jsonKey (text, index + 1,
+                         K, V, B,
+                         insideValue, braces);
+            }
+        }
+        else if ((text.at (index) == '.' || text.at (index) == '-' || text.at (index) == '+' || text.at (index).isNumber())
+                 && text.indexOf (jasonNumExp, index) == index)
+        {
+            QTextCharFormat numFormat;
+            numFormat.setForeground (Brown);
+            numFormat.setFontItalic (true);
+            setFormat (index, match.capturedLength(), numFormat);
+            jsonValue (text, index + match.capturedLength(),
+                       K, V, B,
+                       insideValue, braces);
+        }
+        else if (match.capturedLength() > 1) // keywords
+        {
+            QTextCharFormat keywordFormat;
+            keywordFormat.setForeground (DarkBlue);
+            keywordFormat.setFontWeight (QFont::Bold);
+            setFormat (index, match.capturedLength(), keywordFormat);
+            jsonValue (text, index + match.capturedLength(),
+                       K, V, B,
+                       insideValue, braces);
+        }
+        else // double quote
+        {
+            int end = text.indexOf (quoteMark, index + 1);
+            while (isEscapedChar (text, end))
+                end = text.indexOf (quoteMark, end + 1);
+            if (end >= 0)
+            {
+                setFormat (index, end + 1 - index, regexFormat);
+                jsonValue (text, end + 1,
+                           K, V, B,
+                           insideValue, braces);
+            }
+            else
+            {
+                setFormat (index, text.length() - index, regexFormat);
+                setCurrentBlockState (regexState);
+            }
+        }
+    }
+    else
+        setFormat (start, text.length() - start, errorFormat);
+}
+/*************************/
+void Highlighter::highlightJsonBlock (const QString &text)
+{
+    TextBlockData *data = new TextBlockData;
+
+    int txtL = text.length();
+    if (txtL > 30000
+        /* don't highlight the rest of the document
+           (endState isn't used anywhere else) */
+        || previousBlockState() == endState)
+    {
+        setCurrentBlockState (endState);
+        setFormat (0, txtL, translucentFormat);
+        data->setHighlighted();
+        setCurrentBlockUserData (data);
+        return;
+    }
+
+    int bn = currentBlock().blockNumber();
+    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
+    if (mainFormatting)
+        setFormat (0, txtL, mainFormat);
+
+    /* NOTE:
+       We try to use the available variables of TextBlockData for Json.
+       The meanings of the used variables change as follows:
+
+       TextBlockData::OpenNests          -> Nested keys
+       TextBlockData::LastFormattedRegex -> Nested values
+       TextBlockData::lastFormattedQuote -> Nested brackets (inside values)
+       TextBlockData::Property           -> Locally inside a value (not a key inside a value)
+       TextBlockData::label              -> Keeps track of the order of open braces and brackets
+    */
+
+    int index = 0;
+    bool rehighlightNextBlock = false;
+
+    int oldK = 0, oldV = 0, oldB = 0;
+    bool oldInsideValue = false;
+    QString oldBraces;
+    if (TextBlockData *oldData = static_cast<TextBlockData *>(currentBlockUserData()))
+    {
+        oldK = oldData->openNests();
+        if (oldK > 0)
+        {
+            oldV = oldData->lastFormattedRegex();
+            if (oldV > 0)
+            {
+                oldInsideValue = oldData->getProperty();
+                oldB = oldData->lastFormattedQuote();
+                oldBraces = oldData->labelInfo();
+            }
+        }
+    }
+
+    data->setLastState (currentBlockState());
+    setCurrentBlockState (0);
+
+    int K = 0, V = 0, B = 0;
+    bool insideValue = false;
+    QString braces;
+
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+        {
+            K = prevData->openNests();
+            if (K > 0)
+            {
+                V = prevData->lastFormattedRegex();
+                if (V > 0)
+                {
+                    insideValue = prevData->getProperty();
+                    B = prevData->lastFormattedQuote();
+                    braces = prevData-> labelInfo();
+                }
+            }
+        }
+    }
+
+    if (K > 0)
+    {
+        if (insideValue) // the value continues from the previous line
+        {
+            if (previousBlockState() == regexState)
+            {
+                index = text.indexOf (quoteMark);
+                while (isEscapedChar (text, index))
+                    index = text.indexOf (quoteMark, index + 1);
+                if (index < 0)
+                {
+                    setFormat (0, text.length(), regexFormat);
+                    setCurrentBlockState (regexState);
+                }
+                else
+                {
+                    ++ index;
+                    setFormat (0, index, regexFormat);
+                }
+            }
+            if (index > -1)
+            {
+                jsonValue (text, index,
+                           K, V, B,
+                           insideValue, braces);
+            }
+        }
+        else // the key continues from the previous line
+        {
+            if (previousBlockState() == doubleQuoteState)
+            {
+                index = text.indexOf (quoteMark);
+                while (isEscapedChar (text, index))
+                    index = text.indexOf (quoteMark, index + 1);
+                if (index < 0)
+                {
+                    setFormat (0, text.length(), quoteFormat);
+                    setCurrentBlockState (doubleQuoteState);
+                }
+                else
+                {
+                    ++ index;
+                    setFormat (0, index, quoteFormat);
+                }
+            }
+            if (index > -1)
+            {
+                jsonKey (text, index,
+                         K, V, B,
+                         insideValue, braces);
+            }
+        }
+    }
+    else
+    { // search for a starting brace or bracket
+        index = text.indexOf (startBraceOrBracket);
+        if (index > -1)
+        {
+            setFormat (0, index, errorFormat);
+            ++K;
+            if (text.at (index) == '{')
+            {
+                braces += "{";
+                jsonKey (text, index + 1,
+                         K, V, B,
+                         insideValue, braces);
+            }
+            else
+            { // consider a virtual key and serach in the value
+                ++V;
+                insideValue = true;
+                ++B;
+                braces += "v{[";
+                jsonValue (text, index + 1,
+                           K, V, B,
+                           insideValue, braces);
+           }
+        }
+        else
+            setFormat (0, text.length(), errorFormat);
+    }
+
+    data->insertNestInfo (K); // open keys
+    data->insertLastFormattedRegex (V); // open values
+    data->insertLastFormattedQuote (B); // open brackets (inside values)
+    data->setProperty (insideValue); // locally inside a value
+    data->insertInfo (braces); // the order of open braces and brackets
+
+    /* this is much faster than comparing old and new braces and
+       rehighlighting the next block, especially with text editing */
+    if (currentBlockState() == 0 && !braces.isEmpty())
+    {
+        int n = static_cast<int>(qHash (braces));
+        int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0)); // always even and not endState
+        setCurrentBlockState (state);
+    }
+
+    if (currentBlockState() == data->lastState()
+        && (K != oldK || V != oldV || B != oldB
+            || insideValue != oldInsideValue || braces != oldBraces))
+    {
+        rehighlightNextBlock = true;
+    }
+
+    /* also, format whitespaces */
+    if (mainFormatting)
+    {
+        data->setHighlighted();
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            if (rule.format == whiteSpaceFormat)
+            {
+                QRegularExpressionMatch match;
+                index = text.indexOf (rule.pattern, 0, &match);
+                while (index >= 0)
+                {
+                    setFormat (index, match.capturedLength(), rule.format);
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                }
+                break;
+            }
+        }
+    }
+
+    QTextCharFormat fi;
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0 && (fi == quoteFormat || fi == regexFormat))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+
+    if (rehighlightNextBlock)
+    {
+        QTextBlock nextBlock = currentBlock().next();
+        if (nextBlock.isValid())
+            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-markdown.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-markdown.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-markdown.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-markdown.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,609 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+// This function formats Markdown's block quotes and code blocks.
+// The start and end expressions always include the line start.
+// The end expression includes the line end too.
+bool Highlighter::markdownMultiLine (const QString &text,
+                                     const QString &oldStartPattern,
+                                     const QRegularExpression &startExp, const QRegularExpression &endExp,
+                                     const int state,
+                                     const QTextCharFormat &txtFormat)
+{
+    QRegularExpression endRegex;
+    bool isBlockQuote = false;
+
+    if (startExp.pattern().startsWith ("^\\s{0,"))
+    {
+        isBlockQuote = true;
+        endRegex = endExp;
+    }
+
+    int prevState = previousBlockState();
+
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+
+    if (prevState != state)
+    {
+        int startIndex = text.indexOf (startExp, 0, &startMatch);
+        if (startIndex == -1)
+            return false; // nothing to format
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat
+            || format (startIndex) == quoteFormat)
+        {
+            return false; // this is a comment or quote
+        }
+    }
+
+    bool res = false;
+
+    if (isBlockQuote)
+    {
+        /* don't continue the previous block quote if this line is a list */
+        if (prevState == state)
+        {
+            int extraBlockIndentation = 0;
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            { // the label info is about indentation in this case
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    extraBlockIndentation = prevData->labelInfo().length();
+            }
+            QRegularExpression listRegex (QStringLiteral ("^ {0,")
+                                          + QString::number (3 + extraBlockIndentation)
+                                          + QStringLiteral ("}((\\*\\s+){1,}|(\\+\\s+){1,}|(\\-\\s+){1,}|\\d+\\.\\s+|\\d+\\)\\s+)"));
+            if (text.indexOf (listRegex) > -1)
+                return false;
+        }
+    }
+    else
+    {
+        if (prevState == state)
+        {
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            { // the label info is about end regex in this case
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    endRegex.setPattern (prevData->labelInfo());
+            }
+        }
+        else
+        { // get the end regex from the start regex
+            QString str = startMatch.captured(); // is never empty
+            str += QString (str.at (0));
+            endRegex.setPattern (QStringLiteral ("^\\s*\\K") + str + QStringLiteral ("*(?!\\s*\\S)"));
+        }
+    }
+
+    int endIndex = !isBlockQuote && prevState != state ? // the start of a code block can be ```
+                       -1 : text.indexOf (endRegex, 0, &endMatch);
+    int L;
+    if (endIndex == -1)
+    {
+        L = text.length();
+        setCurrentBlockState (state);
+        if (!isBlockQuote)
+        {
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+            {
+                data->insertInfo (endRegex.pattern());
+                if (data->lastState() == state && oldStartPattern != endRegex.pattern())
+                    res = true;
+            }
+        }
+    }
+    else
+        L = endIndex + endMatch.capturedLength();
+    setFormat (0, L, txtFormat);
+
+    /* format urls and email addresses inside block quotes and code blocks */
+    QString str = text.mid (0, L);
+    int pIndex = 0;
+    QRegularExpressionMatch urlMatch;
+    while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+    {
+        setFormat (pIndex, urlMatch.capturedLength(), urlFormat);
+        pIndex += urlMatch.capturedLength();
+    }
+    /* format note patterns too */
+    pIndex = 0;
+    while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+    {
+        if (format (pIndex) != urlFormat)
+            setFormat (pIndex, urlMatch.capturedLength(), noteFormat);
+        pIndex += urlMatch.capturedLength();
+    }
+
+    return res;
+}
+/*************************/
+void Highlighter::markdownFonts (const QString &text)
+{
+    QTextCharFormat boldFormat = neutralFormat;
+    boldFormat.setFontWeight (QFont::Bold);
+
+    QTextCharFormat italicFormat = neutralFormat;
+    italicFormat.setFontItalic (true);
+
+    QTextCharFormat boldItalicFormat = italicFormat;
+    boldItalicFormat.setFontWeight (QFont::Bold);
+
+    /* NOTE: Apparently, all browsers use expressions similar to the following ones.
+             However, these patterns aren't logical. For example, escaping an asterisk
+             isn't always equivalent to its removal with regard to boldness/italicity.
+             It also seems that five successive asterisks are ignored at start. */
+
+    QRegularExpressionMatch italicMatch;
+    static const QRegularExpression italicExp ("(?<!\\\\|\\*{4})\\*([^*]|(?:(?<!\\*)\\*\\*))+\\*|(?<!\\\\|_{4})_([^_]|(?:(?<!_)__))+_"); // allow double asterisks inside
+
+    QRegularExpressionMatch boldcMatch;
+    //const QRegularExpression boldExp ("\\*\\*(?!\\*)(?:(?!\\*\\*).)+\\*\\*|__(?:(?!__).)+__}");
+    static const QRegularExpression boldExp ("(?<!\\\\|\\*{3})\\*\\*([^*]|(?:(?<!\\*)\\*))+\\*\\*|(?<!\\\\|_{3})__([^_]|(?:(?<!_)_))+__"); // allow single asterisks inside
+
+    static const QRegularExpression boldItalicExp ("(?<!\\\\|\\*{2})\\*{3}([^*]|(?:(?<!\\*)\\*))+\\*{3}|(?<!\\\\|_{2})_{3}([^_]|(?:(?<!_)_))+_{3}");
+
+    QRegularExpressionMatch expMatch;
+    const QRegularExpression exp (boldExp.pattern() + "|" + italicExp.pattern() + "|" + boldItalicExp.pattern());
+
+    int index = 0;
+    while ((index = text.indexOf (exp, index, &expMatch)) > -1)
+    {
+        if (format (index) == mainFormat && format (index + expMatch.capturedLength() - 1) == mainFormat)
+        {
+            if (index == text.indexOf (boldItalicExp, index))
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+            }
+            else if (index == text.indexOf (boldExp, index, &boldcMatch) && boldcMatch.capturedLength() == expMatch.capturedLength())
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldFormat, whiteSpaceFormat);
+                /* also format italic bold strings */
+                QString str = text.mid (index + 2, expMatch.capturedLength() - 4);
+                int indx = 0;
+                while ((indx = str.indexOf (italicExp, indx, &italicMatch)) > -1)
+                {
+                    setFormatWithoutOverwrite (index + 2 + indx, italicMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+                    indx += italicMatch.capturedLength();
+                }
+            }
+            else
+            {
+                setFormatWithoutOverwrite (index, expMatch.capturedLength(), italicFormat, whiteSpaceFormat);
+                /* also format bold italic strings */
+                QString str = text.mid (index + 1, expMatch.capturedLength() - 2);
+                int indx = 0;
+                while ((indx = str.indexOf (boldExp, indx, &boldcMatch)) > -1)
+                {
+                    setFormatWithoutOverwrite (index + 1 + indx, boldcMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
+                    indx += boldcMatch.capturedLength();
+                }
+
+            }
+            index += expMatch.capturedLength();
+        }
+        else ++index;
+    }
+}
+/*************************/
+void Highlighter::highlightMarkdownBlock (const QString &text)
+{
+    bool rehighlightNextBlock = false;
+    bool oldProperty = false;
+    QString oldLabel;
+    if (TextBlockData *oldData = static_cast<TextBlockData *>(currentBlockUserData()))
+    {
+        oldProperty = oldData->getProperty();
+        oldLabel = oldData->labelInfo();
+    }
+
+    int index;
+    TextBlockData *data = new TextBlockData;
+    data->setLastState (currentBlockState());
+    setCurrentBlockUserData (data);
+    setCurrentBlockState (0);
+    QTextCharFormat fi;
+
+    rehighlightNextBlock |= multiLineQuote (text);
+    rehighlightNextBlock |= multiLineComment (text, 0,
+                                              commentStartExpression, commentEndExpression,
+                                              commentState, commentFormat);
+
+    int prevState = previousBlockState();
+    QTextBlock prevBlock = currentBlock().previous();
+    bool prevProperty = false;
+    QString prevLabel;
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+        {
+            prevProperty = prevData->getProperty();
+            prevLabel = prevData->labelInfo();
+        }
+    }
+    int extraBlockIndentation = prevLabel.length();
+    /* determine whether this line is inside a list */
+    if (!prevLabel.isEmpty())
+    {
+        if (prevBlock.text().indexOf (QRegularExpression ("\\S")) > -1)
+            data->insertInfo (prevLabel);
+        else
+        {
+            QRegularExpressionMatch spacesMatch;
+            text.indexOf (QRegularExpression ("^\\s+"), 0, &spacesMatch);
+            if (spacesMatch.capturedLength() == text.length()
+                || spacesMatch.capturedLength() >= prevLabel.length())
+            {
+                data->insertInfo (prevLabel);
+            }
+        }
+    }
+
+    /* a block quote shouldn't be formatted inside a real comment */
+    if (prevState != commentState)
+    {
+        markdownMultiLine (text, QString(),
+                           QRegularExpression (QStringLiteral ("^\\s{0,")
+                                               + QString::number (3 + extraBlockIndentation)
+                                               + QStringLiteral ("}>.*")),
+                           QRegularExpression ("^$"),
+                           markdownBlockQuoteState, blockQuoteFormat);
+    }
+    /* the ``` code block shouldn't be formatted inside a comment or block quote */
+    if (prevState != commentState && prevState != markdownBlockQuoteState)
+    {
+        static const QRegularExpression codeStartRegex ("^ {0,3}\\K(`{3,}(?!`)|~{3,}(?!~))");
+        rehighlightNextBlock |= markdownMultiLine (text, oldLabel,
+                                                   codeStartRegex,
+                                                   QRegularExpression(),
+                                                   codeBlockState, codeBlockFormat);
+    }
+
+    if (currentBlockState() != markdownBlockQuoteState && currentBlockState() != codeBlockState)
+    {
+        QRegularExpressionMatch match;
+
+        /* list start */
+        QTextCharFormat markdownFormat;
+        markdownFormat.setFontWeight (QFont::Bold);
+        markdownFormat.setForeground (DarkBlue);
+        QRegularExpression listRegex (QStringLiteral ("^ {0,")
+                                      + QString::number (3 + extraBlockIndentation)
+                                      + QStringLiteral ("}((\\*\\s+){1,}|(\\+\\s+){1,}|(\\-\\s+){1,}|\\d+\\.\\s+|\\d+\\)\\s+)"));
+        index = text.indexOf (listRegex, 0, &match);
+        fi = format (index);
+        while (index >= 0
+               && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
+                   || fi == commentFormat || fi == urlFormat))
+        {
+            index = text.indexOf (listRegex, index + match.capturedLength(), &match);
+            fi = format (index);
+        }
+        if (index >= 0)
+        {
+            QString spaces;
+            for (int i = 0; i < match.capturedLength(); ++i)
+                spaces += " ";
+            data->insertInfo (spaces);
+            setFormat (index, match.capturedLength(), markdownFormat);
+        }
+
+        /* code block with indentation */
+        static const QRegularExpression codeRegex ("^( {4,}|\\s*\\t+\\s*).*");
+        index = text.indexOf (codeRegex, 0, &match);
+        fi = format (index);
+        while (index >= 0
+               && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
+                   || fi == commentFormat || fi == urlFormat))
+        {
+            index = text.indexOf (codeRegex, index + match.capturedLength(), &match);
+            fi = format (index);
+        }
+        if (index >= 0)
+        {
+            /* when this is about a code block with indentation
+                but the current line can't be code block */
+            const QString prevTxt = prevBlock.text();
+            if ((text.left (4 + extraBlockIndentation)).indexOf (QRegularExpression ("\\S")) > -1
+                || (prevTxt.left (4 + prevLabel.length())).indexOf (QRegularExpression ("\\S")) > -1
+                || (prevTxt.indexOf (QRegularExpression ("\\S")) > -1 && !prevProperty))
+            {
+                if (oldProperty)
+                    rehighlightNextBlock = true;
+            }
+            else
+            {
+                setFormat (index, match.capturedLength(), codeBlockFormat);
+                data->setProperty (true);
+                if (!oldProperty)
+                    rehighlightNextBlock = true;
+            }
+        }
+    }
+
+    int bn = currentBlock().blockNumber();
+    if (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber())
+    {
+        data->setHighlighted(); // completely highlighted
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            QRegularExpressionMatch match;
+            index = text.indexOf (rule.pattern, 0, &match);
+            if (rule.format != whiteSpaceFormat)
+            {
+                if (currentBlockState() == markdownBlockQuoteState || currentBlockState() == codeBlockState)
+                    continue;
+                fi = format (index);
+                while (index >= 0
+                       && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
+                           || fi == commentFormat || fi == urlFormat))
+                {
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    fi = format (index);
+                }
+            }
+
+            while (index >= 0)
+            {
+                setFormat (index, match.capturedLength(), rule.format);
+                index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                if (rule.format != whiteSpaceFormat)
+                {
+                    fi = format (index);
+                    while (index >= 0
+                           && (fi == blockQuoteFormat || fi == codeBlockFormat
+                               || fi == commentFormat || fi == urlFormat))
+                    {
+                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                        fi = format (index);
+                    }
+                }
+            }
+        }
+
+        markdownFonts (text);
+    }
+
+    /* if this line isn't a code block with indentation
+        but the next line was, rehighlight the next line */
+    if (!rehighlightNextBlock && !data->getProperty())
+    {
+        QTextBlock nextBlock = currentBlock().next();
+        if (nextBlock.isValid())
+        {
+            if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
+            {
+                if (nextData->getProperty())
+                    rehighlightNextBlock = true;
+            }
+        }
+    }
+    if (!rehighlightNextBlock)
+    {
+        if (data->labelInfo().length() != oldLabel.length())
+            rehighlightNextBlock = true;
+        else if (!data->labelInfo().isEmpty())
+        {
+            QTextBlock nextBlock = currentBlock().next();
+            if (nextBlock.isValid())
+            {
+                if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
+                {
+                    if (nextData->labelInfo() != data->labelInfo())
+                        rehighlightNextBlock = true;
+                }
+            }
+        }
+    }
+
+    /* left parenthesis */
+    index = text.indexOf ('(');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+
+    if (rehighlightNextBlock)
+    {
+        QTextBlock nextBlock = currentBlock().next();
+        if (nextBlock.isValid())
+            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-pascal.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-pascal.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-pascal.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-pascal.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+static const QRegularExpression pascalCommentStartExp ("\\(\\*|\\{");
+
+bool Highlighter::isPascalQuoted (const QString &text, const int index,
+                                  const int start) const
+{
+    if (index < 0) return false;
+    int N = 0;
+    int indx = start;
+    while ((indx = text.indexOf (quoteMark, indx)) > -1 && indx < index)
+    {
+        if (format (indx) != commentFormat && format (indx) != urlFormat
+            && format (indx) != regexFormat)
+        {
+            ++ N;
+        }
+        ++ indx;
+    }
+    return N % 2 != 0;
+}
+/*************************/
+bool Highlighter::isPascalMLCommented (const QString &text, const int index,
+                                       const int start) const
+{
+    if (index < 0 || start < 0 || index < start)
+        return false;
+
+    int prevState = previousBlockState();
+    bool res = false;
+    int pos = start - 1;
+    int N;
+    QRegularExpressionMatch commentMatch;
+    QRegularExpression commentExpression;
+    if (pos >= 0 || prevState != commentState)
+    {
+        N = 0;
+        commentExpression = pascalCommentStartExp;
+    }
+    else
+    {
+        N = 1;
+        res = true;
+        bool oldComment = false;
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
+            oldComment = prevData && prevData->getProperty();
+        }
+        if (oldComment)
+            commentExpression.setPattern ("\\*\\)");
+        else
+            commentExpression.setPattern ("\\}");
+    }
+
+    while ((pos = text.indexOf (commentExpression, pos + 1, &commentMatch)) >= 0)
+    {
+        /* skip formatted quotations */
+        if (format (pos) == quoteFormat) continue;
+
+        ++N;
+
+        if (index < pos + (N % 2 == 0 ? commentMatch.capturedLength() : 0))
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        if (N % 2 != 0)
+        {
+            if (text.at (pos) == '(')
+                commentExpression.setPattern ("\\*\\)");
+            else
+                commentExpression.setPattern ("\\}");
+            res = true;
+        }
+        else
+        {
+            commentExpression = pascalCommentStartExp;
+            res = false;
+        }
+    }
+
+    return res;
+
+}
+/*************************/
+void Highlighter::singleLinePascalComment (const QString &text, const int start)
+{
+    QRegularExpression commentExp ("//.*");
+    int startIndex = qMax (start, 0);
+    startIndex = text.indexOf (commentExp, startIndex);
+    /* skip quoted comments */
+    while (format (startIndex) == quoteFormat // only for multiLinePascalComment()
+           || isPascalQuoted (text, startIndex, qMax (start, 0)))
+    {
+        startIndex = text.indexOf (commentExp, startIndex + 1);
+    }
+    if (startIndex > -1)
+    {
+        int l = text.length();
+        setFormat (startIndex, l - startIndex, commentFormat);
+
+        /* also format urls and email addresses inside the comment */
+        QString str = text.mid (startIndex, l - startIndex);
+        int pIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+        {
+            setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+        /* format note patterns too */
+        pIndex = 0;
+        while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+        {
+            if (format (pIndex + startIndex) != urlFormat)
+                setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+            pIndex += urlMatch.capturedLength();
+        }
+    }
+}
+/*************************/
+void Highlighter::pascalQuote (const QString &text, const int start)
+{
+    int index = start;
+    index = text.indexOf (quoteMark, index);
+    /* skip escaped start quotes and all comments */
+    while (isPascalMLCommented (text, index))
+        index = text.indexOf (quoteMark, index + 1);
+    while (format (index) == commentFormat || format (index) == urlFormat) // single-line
+        index = text.indexOf (quoteMark, index + 1);
+
+    while (index >= 0)
+    {
+        QRegularExpressionMatch quoteMatch;
+        int endIndex = text.indexOf (quoteMark, index + 1, &quoteMatch);
+        if (endIndex == -1)
+        {
+            setFormat (index, text.length() - index, quoteFormat);
+            return;
+        }
+
+        int quoteLength = endIndex - index
+                          + quoteMatch.capturedLength();
+        setFormat (index, quoteLength, quoteFormat);
+
+        index = text.indexOf (quoteMark, index + quoteLength);
+        while (isPascalMLCommented (text, index, endIndex + 1))
+            index = text.indexOf (quoteMark, index + 1);
+        while (format (index) == commentFormat || format (index) == urlFormat)
+            index = text.indexOf (quoteMark, index + 1);
+    }
+}
+/*************************/
+void Highlighter::multiLinePascalComment (const QString &text)
+{
+    int prevState = previousBlockState();
+    int startIndex = 0;
+    bool oldComment = false;
+
+    QRegularExpression commentEndExp;
+    QRegularExpressionMatch startMatch;
+
+    if (prevState == commentState)
+    {
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
+            oldComment = prevData && prevData->getProperty();
+        }
+    }
+    else
+    {
+        startIndex = text.indexOf (pascalCommentStartExp, startIndex, &startMatch);
+        /* skip quotations (all formatted to this point) */
+        while (format (startIndex) == quoteFormat)
+            startIndex = text.indexOf (pascalCommentStartExp, startIndex + 1, &startMatch);
+        /* skip single-line comments */
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            return;
+        oldComment = startIndex >= 0 && text.at (startIndex) == '(';
+    }
+
+    while (startIndex >= 0)
+    {
+        int endIndex;
+        QRegularExpressionMatch endMatch;
+        if (oldComment)
+            commentEndExp.setPattern ("\\*\\)");
+        else
+            commentEndExp.setPattern ("\\}");
+
+        if (prevState == commentState && startIndex == 0)
+            endIndex = text.indexOf (commentEndExp, 0, &endMatch);
+        else
+        {
+            endIndex = text.indexOf (commentEndExp,
+                                     startIndex + startMatch.capturedLength(),
+                                     &endMatch);
+        }
+
+        /* if there's a comment end ... */
+        if (endIndex >= 0)
+        {
+            /* ... clear the comment format from there to reformat
+               because a single-line comment may have changed now */
+            int badIndex = endIndex + endMatch.capturedLength();
+            bool hadSingleLineComment = false;
+            int i = 0;
+            for (i = badIndex; i < text.length(); ++i)
+            {
+                if (format (i) == commentFormat || format (i) == urlFormat)
+                {
+                    setFormat (i, text.length() - i, mainFormat);
+                    hadSingleLineComment = true;
+                    break;
+                }
+            }
+            singleLinePascalComment (text, badIndex);
+            if (hadSingleLineComment)
+                pascalQuote (text, i);
+        }
+
+        bool compilerDirective (!(startIndex == 0 && prevState == commentState)
+                                && text.length() > (startIndex + (oldComment ? 2 : 1))
+                                && text.at (startIndex + (oldComment ? 2 : 1)) == '$');
+        int commentLength;
+        if (endIndex == -1)
+        {
+            commentLength = text.length() - startIndex;
+            if (!compilerDirective)
+            {
+                setCurrentBlockState (commentState);
+                if (oldComment)
+                {
+                    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                        data->setProperty (true);
+                }
+            }
+        }
+        else
+            commentLength = endIndex - startIndex
+                            + endMatch.capturedLength();
+
+        setFormat (startIndex, commentLength, compilerDirective ? regexFormat
+                                                                : commentFormat);
+
+        if (!compilerDirective)
+        {
+            /* format urls and email addresses inside the comment */
+            QString str = text.mid (startIndex, commentLength);
+            int pIndex = 0;
+            QRegularExpressionMatch urlMatch;
+            while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
+            {
+                setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
+                pIndex += urlMatch.capturedLength();
+            }
+            /* format note patterns too */
+            pIndex = 0;
+            while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
+            {
+                if (format (pIndex + startIndex) != urlFormat)
+                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
+                pIndex += urlMatch.capturedLength();
+            }
+        }
+
+        startIndex = text.indexOf (pascalCommentStartExp, startIndex + commentLength, &startMatch);
+        while (format (startIndex) == quoteFormat)
+            startIndex = text.indexOf (pascalCommentStartExp, startIndex + 1, &startMatch);
+        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
+            return;
+        oldComment = startIndex >= 0 && text.at (startIndex) == '(';
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-patterns.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-patterns.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-patterns.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-patterns.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+QStringList Highlighter::keywords (const QString &lang)
+{
+    QStringList keywordPatterns;
+    if (lang == "c" || lang == "cpp")
+    {
+        keywordPatterns << "\\b(and|asm|auto)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(const|case|catch|cdecl|continue)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(break|default|do)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(enum|explicit|else|extern)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(for|goto|if|NULL|or|pasca|register|return)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(signals|sizeof|static|struct|switch)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(typedef|typename|union|volatile|while)(?!(\\.|-|@|#|\\$))\\b";
+
+        if (lang == "c")
+            keywordPatterns << "\\b(FALSE|TRUE)(?!(\\.|-|@|#|\\$))\\b";
+        else
+            keywordPatterns << "\\b(class|const_cast|delete|dynamic_cast)(?!(\\.|-|@|#|\\$))\\b"
+                            << "\\b(false|foreach|friend|inline|namespace|new|operator)(?!(\\.|-|@|#|\\$))\\b"
+                            << "\\b(nullptr|override|private|protected|public|qobject_cast|reinterpret_cast|slots|static_cast)(?!(\\.|-|@|#|\\$))\\b"
+                            << "\\b(template|true|this|throw|try|typeid|using|virtual)(?!(\\.|-|@|#|\\$))\\b"
+                            << "\\bthis(?=->)\\b"; // "this" can be followed by "->"
+    }
+    else if (lang == "sh" || lang == "makefile" || lang == "cmake") // the characters "(", ";" and "&" will be reformatted after this
+    {
+        keywordPatterns << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(alias|bg|bind|break|builtin)(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(caller|case|command|compgen|complete|continue)(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(declare|default|dirs|disown|do|done)(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(echo|elif|elseif|else|enable|esac|eval|exec|exit|export)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(?<!(@|\\^|\\$|\\.|%|\\*|\\+|-|/))false(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(fg|fi|for|foreach|getopts|hash|help|history|if|in)(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(jobs|let|local|logout|popd|printf|pushd|read|readonly|return)(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(select|seq|set|shift|shopt|source|suspend|test|then|times|trap|type|typeset)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(?<!(@|\\^|\\$|\\.|%|\\*|\\+|-|/))true(?!(\\.|-|@|#|\\$))\\b"
+                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(umask|unalias|unset|until|wait|while)(?!(\\.|-|@|#|\\$))\\b";
+        if (lang == "cmake") // (?i) is supported by QRegularExpression for ignoring case-sensitivity
+            keywordPatterns << "(?i)(^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)(endif|endmacro|endwhile|file|include|option|project|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_subdirectory|add_feature_info|add_test|aux_source_directory|build_command|cmake_dependent_option|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|configure_package_config_file|create_test_sourcelist|define_property|ecm_configure_package_config_file|ecm_setup_version|enable_language|enable_testing|endforeach|endfunction|exec_program|execute_process|feature_summary|find_file|find_library|find_package|find_package_handle_standard_args|find_path|find_program|fltk_wrap_ui|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|include_directories|include_external_msproject|include_regular_expressionlink_directories|list|load_cache|load_command|macro|mark_as_advanced|math|message|pkg_check_modules|pkg_search_module|print_enabled_features|print_disabled_features|qt_wrap_cpp|qt_wrap_ui|remove_definitions|separate_arguments|set_directory_properties|set_feature_info|set_package_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|target_compile_definitions|target_compile_options|target_include_directories|target_link_libraries|try_compile|try_run|variable_watch|write_basic_package_version_file)\\s*(?=(\\(|$))";
+    }
+    else if (lang == "qmake")
+    {
+        keywordPatterns << "\\b(CONFIG|DEFINES|DEF_FILE|DEPENDPATH|DEPLOYMENT_PLUGIN|DESTDIR|DISTFILES|DLLDESTDIR|FORMS|GUID|HEADERS|ICON|IDLSOURCES|INCLUDEPATH|INSTALLS|LEXIMPLS|LEXOBJECTS|LEXSOURCES|LIBS|LITERAL_HASH|MAKEFILE|MAKEFILE_GENERATOR|MOC_DIR|OBJECTS|OBJECTS_DIR|POST_TARGETDEPS|PRE_TARGETDEPS|PRECOMPILED_HEADER|PWD|OTHER_FILES|OUT_PWD|QMAKE|QMAKESPEC|QMAKE_AR_CMD|QMAKE_BUNDLE_DATA|QMAKE_BUNDLE_EXTENSION|QMAKE_BUNDLE_EXTENSION|QMAKE_CFLAGS|QMAKE_CFLAGS|QMAKE_CFLAGS_RELEASE|QMAKE_CFLAGS_SHLIB|QMAKE_CFLAGS_THREAD|QMAKE_CFLAGS_WARN_OFF|QMAKE_CFLAGS_WARN_ON|QMAKE_CLEAN|QMAKE_CXX|QMAKE_CXXFLAGS|QMAKE_CXXFLAGS_DEBUG|QMAKE_CXXFLAGS_RELEASE|QMAKE_CXXFLAGS_SHLIB|QMAKE_CXXFLAGS_THREAD|QMAKE_CXXFLAGS_WARN_OFF|QMAKE_CXXFLAGS_WARN_ON|QMAKE_DISTCLEAN|QMAKE_EXTENSION_SHLIB|QMAKE_EXTENSION_STATICLIB|QMAKE_EXT_MOC|QMAKE_EXT_UI|QMAKE_EXT_PRL|QMAKE_EXT_LEX|QMAKE_EXT_YACC|QMAKE_EXT_OBJ|QMAKE_EXT_CPP|QMAKE_EXT_H|QMAKE_EXTRA_COMPILERS|QMAKE_EXTRA_TARGETS|QMAKE_FAILED_REQUIREMENTS|QMAKE_FRAMEWORK_BUNDLE_NAME|QMAKE_FRAMEWORK_VERSION|QMAKE_HOST|QMAKE_INCDIR|QMAKE_INCDIR_EGL|QMAKE_INCDIR_OPENGL|QMAKE_INCDIR_OPENGL_ES2|QMAKE_INCDIR_OPENVG|QMAKE_INCDIR_X11|QMAKE_INFO_PLIST|QMAKE_LFLAGS|QMAKE_LFLAGS_CONSOLE|QMAKE_LFLAGS_DEBUG|QMAKE_LFLAGS_PLUGIN|QMAKE_LFLAGS_RPATH|QMAKE_LFLAGS_REL_RPATH|QMAKE_REL_RPATH_BASE|QMAKE_LFLAGS_RPATHLINK|QMAKE_LFLAGS_RELEASE|QMAKE_LFLAGS_APP|QMAKE_LFLAGS_SHLIB|QMAKE_LFLAGS_SONAME|QMAKE_LFLAGS_THREAD|QMAKE_LFLAGS_WINDOWS|QMAKE_LIBDIR|QMAKE_LIBDIR_FLAGS|QMAKE_LIBDIR_EGL|QMAKE_LIBDIR_OPENGL|QMAKE_LIBDIR_OPENVG|QMAKE_LIBDIR_X11|QMAKE_LIBS|QMAKE_LIBS_EGL|QMAKE_LIBS_OPENGL|QMAKE_LIBS_OPENGL_ES1|QMAKE_LIBS_OPENGL_ES2|QMAKE_LIBS_OPENVG|QMAKE_LIBS_THREAD|QMAKE_LIBS_X11|QMAKE_LIB_FLAG|QMAKE_LINK_SHLIB_CMD|QMAKE_LN_SHLIB|QMAKE_OBJECTIVE_CFLAGS|QMAKE_POST_LINK|QMAKE_PRE_LINK|QMAKE_PROJECT_NAME|QMAKE_MAC_SDK|QMAKE_MACOSX_DEPLOYMENT_TARGET|QMAKE_MAKEFILE|QMAKE_QMAKE|QMAKE_RESOURCE_FLAGS|QMAKE_RPATHDIR|QMAKE_RPATHLINKDIR|QMAKE_RUN_CC|QMAKE_RUN_CC_IMP|QMAKE_RUN_CXX|QMAKE_RUN_CXX_IMP|QMAKE_SONAME_PREFIX|QMAKE_TARGET|QMAKE_TARGET_COMPANY|QMAKE_TARGET_DESCRIPTION|QMAKE_TARGET_COPYRIGHT|QMAKE_TARGET_PRODUCT|QT|QTPLUGIN|QT_VERSION|QT_MAJOR_VERSION|QT_MINOR_VERSION|QT_PATCH_VERSION|RC_CODEPAGE|RC_DEFINES|RCC_DIR|RC_FILE|RC_ICONS|RC_INCLUDEPATH|RC_LANG|REQUIRES|RES_FILE|RESOURCES|SIGNATURE_FILE|SOURCES|SUBDIRS|TARGET|TARGET_EXT|TARGET_x|TARGET_x.y.z|TEMPLATE|TRANSLATIONS|UI_DIR|VERSION|VERSION_PE_HEADER|VER_MAJ|VER_MIN|VER_PAT|VPATH|WINRT_MANIFEST|YACCSOURCES|_PRO_FILE_|_PRO_FILE_PWD_)(?!(@|#|\\$))\\b";
+    }
+    else if (lang == "troff")
+    {
+        keywordPatterns << "^\\.(AT|B|BI|BR|BX|CW|DT|EQ|EN|I|IB|IR|IP|LG|LP|NL|P|PE|PD|PP|PS|R|RI|RB|RS|RE|SH|SM|SB|SS|TH|TS|TE|HP|TP|UC|UL|ab|ad|af|am|as|bd|bp|br|brp|c2|cc|ce|cend|cf|ch|cs|cstart|cu|da|de|di|ds|dt|ec|el|em|end|eo|ev|ex|fc|fi|fl|fp|ft|hc|hw|hy|ie|if|ig|in|it|lc|lg|ll|ls|lt|mc|mk|na|ne|nf|nh|nm|nn|nr|ns|nx|os|pc|pi|pl|pm|pm|pn|po|ps|rd|rj|rm|rn|rr|rs|rt|so|sp|ss|sv|sy|ta|tc|ti|tl|tm|tr|uf|ul|vs|wh)(?!(\\.|-|@|#|\\$))\\b";
+    }
+    else if (lang == "LaTeX")
+    {
+        keywordPatterns << "(?<!\\\\)\\\\(documentclass|begin|end|usepackage|maketitle|include|includeonly|input|label|caption|ref|pageref)(?!(@|#))(_|\\b)"
+                        << "(?<!\\\\)\\\\(section|subsection|subsubsection|title|author|part|chapter|paragraph|subparagraph)\\*?\\s*\\{[^{}]*\\}";
+    }
+    else if (lang == "perl")
+    {
+        keywordPatterns << "\\b(?<!(@|#|%|\\$))(abs|accept|alarm|and|atan2|bind|binmode|bless|break)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(caller|chdir|chmod|chown|chroot|chomp|chop|chr|close|closedir|cmp|connect|continue|cos|crypt)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(dbmclose|dbmopen|defined|delete|die|do|dump)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(each|else|elsif|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exit|exp)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(fcntl|fileno|flock|for|foreach|fork|format|formline)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(ge|getc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|goto|grep|gt|hex)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(if|import|index|int|ioctl|join|keys|kill)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(last|lc|lcfirst|le|length|link|listen|local|localtime|lock|log|lt|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|ne|next|no|not)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(oct|open|opendir|or|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(rand|read|readdir|readlink|readpipe|recv|redo|ref|rename|require|return|reverse|rewinddir|rindex|rmdir)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(say|scalar|seek|seekdir|select|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|state|study|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|switch)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(tell|telldir|tie|tied|time|times|truncate)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(uc|ucfirst|umask|undef|unless|unlink|unpack|unshift|untie|use|utime)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(values|vec)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))(wait|waitpid|warn|wantarray|while|write|xor)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|%|\\$))__(FILE|LINE|PACKAGE)__";
+    }
+    else if (lang == "ruby")
+    {
+        keywordPatterns << "\\b(__FILE__|__LINE__)(?!(@|#|\\$))\\b"
+                        << "\\b(alias|and|begin|BEGIN|break)(?!(@|#|\\$))\\b"
+                        << "\\b(case|class|defined|do|def)(?!(@|#|\\$))\\b"
+                        << "\\b(else|elsif|end|END|ensure|for|false)(?!(@|#|\\$))\\b"
+                        << "\\b(if|in|module)(?!(@|#|\\$))\\b"
+                        << "\\b(next|nil|not|or)(?!(@|#|\\$))\\b"
+                        << "\\b(redo|rescue|retry|return)(?!(@|#|\\$))\\b"
+                        << "\\b(super|self|then|true)(?!(@|#|\\$))\\b"
+                        << "\\b(undef|unless|until|when|while|yield)(?!(@|#|\\$))\\b";
+    }
+    else if (lang == "lua")
+        keywordPatterns << "\\b(and|break|do)(?!(\\.|@|#|\\$))\\b"
+                        << "\\b(else|elseif|end)(?!(\\.|@|#|\\$))\\b"
+                        << "\\b(false|for|function)(?!(\\.|@|#|\\$))\\b"
+                        << "\\b(if|in|local|nil|not|or|repeat|return)(?!(\\.|@|#|\\$))\\b"
+                        << "\\b(then|true|until|while)(?!(\\.|@|#|\\$))\\b";
+    else if (lang == "python")
+        keywordPatterns << "\\b(and|as|assert|break|class|continue)(?!(@|\\$))\\b"
+                        << "\\b(def|del|elif|else|except|False|finally|for|from|global)(?!(@|\\$))\\b"
+                        << "\\b(if|is|import|in|lambda|None|not|or|raise|return|True|try|while|with|yield)(?!(@|\\$))\\b"
+                        << "\\b(exec|print)(?!(@|\\$|\\s*\\())\\b";
+    else if (lang == "javascript" || lang == "qml")
+    {
+        keywordPatterns << "\\b(?<!(@|#|\\$))(abstract|arguments|await|break)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(case|catch|class|const|continue)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(debugger|default|delete|do)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(else|enum|eval|extends)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(false|final|finally|for|function|goto)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(if|implements|in|Infinity|instanceof|interface|let)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(Math|native|new|null|of)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(package|private|protected|prototype|public|return)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(static|super|switch|synchronized)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(throw|throws|this|transient|true|try|typeof)(?!(@|#|\\$))\\b"
+                        << "\\b(?<!(@|#|\\$))(undefined|void|volatile|while|with|yield)(?!(@|#|\\$))\\b";
+        if (lang == "javascript")
+            keywordPatterns << "\\b(?<!(@|#|\\$))(var)(?!(@|#|\\$))\\b";
+        else if (lang == "qml")
+            keywordPatterns << "\\b(?<!(@|#|\\$))(alias|id|property|readonly|signal)(?!(@|#|\\$))\\b";
+    }
+    else if (lang == "php")
+        keywordPatterns << "\\b(?<!(#|\\$))(__FILE__|__LINE__|__FUNCTION__|__CLASS__|__METHOD__|__DIR__|__NAMESPACE__)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(and|abstract|array|as|break)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(case|catch|cfunction|class|clone|const|continue)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(declare|default|die|do)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(each|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exception|exit|extends)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(false|final|for|foreach|function)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(global|goto|if|implements|interface|instanceof|isset)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(list|namespace|new|null|old_function|or)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(php_user_filter|print|private|protected|public|return)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(static|switch|throw|true|try)(?!(#|\\$))\\b"
+                        << "\\b(?<!(#|\\$))(unset|use|var|while|xor)(?!(#|\\$))\\b";
+    else if (lang == "scss") // taken from http://sass-lang.com/documentation/Sass/Script/Functions.html
+        keywordPatterns << "\\b(none|null)(?!(\\.|-|@|#|\\$))\\b"
+                        << "\\b(abs|adjust-color|adjust-hue|alpha|append|blue|call|ceil|change-color|comparable|complement|content-exists|darken|desaturate|feature-exists|floor|function-exists|get-function|global-variable-exists|grayscale|green|hsl|hsla|hue|ie-hex-str|if|index|inspect|invert|is-bracketed|is-superselector|join|keywords|length|lighten|lightness|list-separator|map-get|map-has-key|map-keys|map-merge|map-remove|map-values|max|min|mixin-exists|mix|nth|opacify|percentage|quote|random|red|rgb|rgba|round|scale-color|saturate|saturation|selector-nest|selector-append|selector-extend|selector-parse|selector-replace|selector-unify|set-nth|simple-selectors|str-index|str-insert|str-length|str-slice|to-lower-case|to-upper-case|transparentize|type-of|unit|unitless|unquote|variable-exists|zip)(?=\\()"
+                        << "\\bunique-id\\(\\s*\\)";
+    else if (lang == "dart")
+        keywordPatterns << "\\b(abstract|as|assert|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic)\\b"
+                        << "\\b(else|enum|export|extends|external|factory|false|final|finally|for|Function|get|hide|if|implements|import|in|interface|is)\\b"
+                        << "\\b(library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync)\\b"
+                        << "\\b(this|throw|true|try|typedef|var|void|while|with|yield)\\b";
+    else if (lang == "pascal") // case-insensitive
+        keywordPatterns << "(?i)\\b(?<!(@|#|\\$))(absolute|abstract|alias|and|array|as|asm|assembler|attribute|begin|bindable|bitpacked|break|case|cdecl|class|const|constructor|continue|cppdecl|cvar|default|deprecated|destructor|dispinterface|dispose|div|do|downto|dynamic|else|end|enumerator|except|experimental|export|exports|external|false|far|far16|file|finalization|finally|for|forward|function|generic|goto|helper|if|implementation|implements|in|index|inherited|initialization|inline|interface|interrupt|is|label|library|iocheck|local|message|mod|name|near|new|nil|nodefault|noreturn|nostackframe|not|object|oldfpccall|on|of|otherwise|out|operator|or|overload|override|pack|packed|page|pascal|platform|private|procedure|program|property|protected|public|published|raise|read|readln|record|register|reintroduce|repeat|resourcestring|reset|result|rewrite|safecall|saveregisters|self|set|shl|shr|softfloat|specialize|static|stdcall|stored|strict|then|to|threadvar|true|try|type|unaligned|unimplemented|unit|unpack|until|uses|var|varargs|virtual|while|winapi|with|write|writeln|xor)(?!(@|#|\\$))\\b";
+    else if (lang == "java")
+        keywordPatterns << "\\b(abstract|assert|break|case|catch|class|const|while|continue|default|do|else|extends|final|finally|for|goto|if|implements|import|instanceof|interface|module|native|new|package|private|protected|public|return|static|strictfp|super|switch|synchronized|this|throw|throws|transient|try|var|volatile|while)(?!(@|#|\\$))\\b"
+                        << "\\b(true|false|null)(?!(\\.|-|@|#|\\$))\\b";
+    else if (lang == "go")
+        keywordPatterns << "\\b(break|case|chan|const|continue|default|defer|else|fallthrough|false|for|func|go|goto|if|import|interface|map|nil|package|range|return|select|struct|switch|true|type|var)(?!(\\.|-|@|#|\\$))\\b";
+
+    return keywordPatterns;
+}
+/*************************/
+QStringList Highlighter::types()
+{
+    QStringList typePatterns;
+    if (progLan == "c" || progLan == "cpp")
+    {
+        typePatterns << "\\b(bool|char|double|float)(?!(\\.|-|@|#|\\$))\\b"
+                     << "\\b(gchar|gint|guint|guint8|guint16|guint32|guint64|gboolean)(?!(\\.|-|@|#|\\$))\\b"
+                     << "\\b(int|long|short)(?!(\\.|-|@|#|\\$))\\b"
+                     << "\\b(unsigned|uint|uint8|uint16|uint32|uint64|uint8_t|uint16_t|uint32_t|uint64_t)(?!(\\.|-|@|#|\\$))\\b"
+                     << "\\b(uid_t|gid_t|mode_t)(?!(\\.|-|@|#|\\$))\\b"
+                     << "\\b(void|wchar_t)(?!(\\.|-|@|#|\\$))\\b";
+        if (progLan == "cpp")
+            typePatterns << "\\b(qreal|qint8|quint8|qint16|quint16|qint32|quint32|qint64|quint64|qlonglong|qulonglong|qptrdiff|quintptr)(?!(\\.|-|@|#|\\$))\\b"
+                         << "\\b(uchar|ulong|ushort)(?!(\\.|-|@|#|\\$))\\b"
+                         << "\\b(std::[a-z_]+)(?=\\s*\\S+)(?!(\\s*\\(|\\.|-|@|#|\\$))\\b";
+    }
+    else if (progLan == "qml")
+    {
+        typePatterns << "\\b(?<!(@|#|\\$))(bool|double|enumeration|int|list|real|string|url|var)(?!(@|#|\\$))\\b"
+                     << "\\b(?<!(@|#|\\$))(color|date|font|matrix4x4|point|quaternion|rect|size|vector2d|vector3d|vector4d)(?!(@|#|\\$))\\b";
+    }
+    else if (progLan == "dart")
+    {
+        typePatterns << "\\b(bool|double|int|num)(?!(@|#|\\$))\\b";
+    }
+    else if (progLan == "pascal")
+    {
+        typePatterns << "(?i)\\b(?<!(@|#|\\$))(byte|cardinal|char|int64|integer|qword|qwordbool|real|boolean|bytebool|enumerated|longbool|longint|longword|shortint|single|smallint|string|widechar|word|wordbool)(?!(@|#|\\$))\\b";
+    }
+    else if (progLan == "java")
+    {
+        typePatterns << "\\b(boolean|byte|char|double|enum|float|int|long|short|void)(?!(\\.|-|@|#|\\$))\\b";
+    }
+    else if (progLan == "go")
+    {
+        typePatterns << "\\b(bool|byte|complex64|complex128|error|float32|float64|int8|int16|int32|int64|uint8|uint16|uint32|uint64|int|uint|rune|string|uintptr)(?!(\\.|-|@|#|\\$))\\b";
+    }
+    return typePatterns;
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-perl-regex.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-perl-regex.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-perl-regex.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-perl-regex.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,680 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2019-2020 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+/* NOTE: We deal with four kinds of regex structures:
+
+         1. Simple, single structures, like /.../ or q|...|;
+         2. Single structures with braces, like {...} or q{...};
+         3. Simple replacing operators like s/.../.../; and
+         4. Replacing with braces, like s{...}...{...}
+
+         We cheat and include "q", "qq", "qw", "qx" and "qr" here to have a simpler code.
+         Moreover, the => operator is excluded. */
+static const QRegularExpression rExp ("/|\\b(?<!(@|#|%|\\$))(m|qr|q|qq|qw|qx|qr|(?<!-)s|y|tr)\\s*(?!\\=>)[^\\w\\}\\)\\]>\\s]");
+static const QRegularExpression delimiterExp ("[^\\w\\}\\)\\]>\\s]");
+/* "e", "o" and "r" are substitution-specific modifiers. */
+static const QString flags ("acdegilmnoprsux"); // previously "sgimx"
+
+// This is only for the start.
+bool Highlighter::isEscapedPerlRegex (const QString &text, const int pos)
+{
+    if (pos < 0) return false;
+
+    if (format (pos) == quoteFormat || format (pos) == altQuoteFormat
+        || format (pos) == commentFormat || format (pos) == urlFormat)
+    {
+        return true;
+    }
+
+    static QRegularExpression perlKeys;
+
+    int i = pos - 1;
+    if (i < 0) return false;
+
+    if (text.at (pos) != '/')
+    {
+        if (format (i) == regexFormat)
+            return true;
+        return false;
+    }
+
+    /* FIXME: Why? */
+    int slashes = 0;
+    while (i >= 0 && format (i) != regexFormat && text.at (i) == '/')
+    {
+        -- i;
+        ++ slashes;
+    }
+    if (slashes % 2 != 0)
+        return true;
+
+    i = pos - 1;
+    while (i >= 0 && (text.at (i) == ' ' || text.at (i) == '\t'))
+        --i;
+    if (i >= 0)
+    {
+        QChar ch = text.at (i);
+        if (format (i) != regexFormat && (ch.isLetterOrNumber() || ch == '_'
+                                          || ch == ')' || ch == ']' || ch == '}' || ch == '#'
+                                          || (i == pos - 1 && (ch == '$' || ch == '@'))
+                                          || (i >= 1
+                                              && (text.at (i - 1) == '$'
+                                                  || (text.at (i - 1) == '@' && (ch == '+' || ch == '-'))
+                                                  || (text.at (i - 1) == '%' && (ch == '+' || ch == '-' || ch == '!'))))
+                                          /* after an escaped start quote */
+                                          || (i > 0 && (ch == '\"' || ch == '\'' || ch == '`')
+                                              && format (i) != quoteFormat && format (i) != altQuoteFormat)))
+        {
+            /* a regex isn't escaped if it follows a Perl keyword */
+            if (perlKeys.pattern().isEmpty())
+                perlKeys.setPattern (keywords (progLan).join ('|'));
+            int len = qMin (12, i + 1);
+            QString str = text.mid (i - len + 1, len);
+            int j;
+            QRegularExpressionMatch keyMatch;
+            if ((j = str.lastIndexOf (perlKeys, -1, &keyMatch)) > -1 && j + keyMatch.capturedLength() == len)
+                return false;
+            /* check the flags too */
+            if (ch.isLetter())
+            {
+                while (i > 0 && flags.contains (text.at (i)))
+                    -- i;
+                if (format (i) == regexFormat)
+                    return false;
+            }
+            return true;
+        }
+    }
+
+    return false;
+}
+/*************************/
+// Takes care of open braces too.
+int Highlighter::findDelimiter (const QString &text, const int index,
+                                const QRegularExpression &delimExp, int &capturedLength) const
+{
+    int i = qMax (index, 0);
+    const QString pattern = delimExp.pattern();
+    if (pattern.startsWith ("\\")
+        && (pattern.endsWith (")") || pattern.endsWith ("}")
+            || pattern.endsWith ("]") || pattern.endsWith (">")))
+    { // the end delimiter should be found
+        int N = 1;
+        if (index < 0)
+        {
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    N = prevData->openNests();
+            }
+        }
+        QChar endBrace = pattern.at (pattern.size() - 1);
+        QChar startBrace = endBrace == ')' ? '('
+                           : endBrace == '}' ? '{'
+                           : endBrace == ']' ? '['
+                           : '<';
+        const int L = text.length();
+        while (N > 0 && i < L)
+        {
+            QChar c = text.at (i);
+            if (c == endBrace)
+            {
+                if (!isEscapedChar (text, i))
+                    -- N;
+            }
+            else if (c == startBrace && !isEscapedChar (text, i))
+                ++ N;
+            ++ i;
+        }
+        if (N == 0)
+        {
+            if (i == 0) // doesn't happen
+            {
+                int res = text.indexOf (delimExp, 0);
+                capturedLength = res == -1 ? 0 : 1;
+                return res;
+            }
+            else
+            {
+                capturedLength = 1;
+                return i - 1;
+            }
+        }
+        else
+        {
+            static_cast<TextBlockData *>(currentBlock().userData())->insertNestInfo (N);
+            capturedLength = 0;
+            return -1;
+        }
+    }
+    else
+    {
+        QRegularExpressionMatch match;
+        int res = text.indexOf (delimExp, i, &match);
+        capturedLength = match.capturedLength();
+        return res;
+    }
+}
+/*************************/
+static inline QString getEndDelimiter (const QString &brace)
+{
+    if (brace == "(")
+        return ")";
+    if (brace == "{")
+        return "}";
+    if (brace == "[")
+        return "]";
+    if (brace == "<")
+        return ">";
+    return brace;
+}
+/*************************/
+static inline QString startBrace (QString &brace)
+{
+    if (brace == ")")
+        return  "(";
+    if (brace == "}")
+        return "{";
+    if (brace == "]")
+        return "[";
+    if (brace == ">")
+        return "<";
+    return QString();
+}
+/*************************/
+bool Highlighter::isInsidePerlRegex (const QString &text, const int index)
+{
+    if (index < 0) return false;
+
+    int pos = -1;
+
+    if (format (index) == regexFormat)
+        return true;
+    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+    {
+        pos = data->lastFormattedRegex() - 1;
+        if (index <= pos) return false;
+    }
+
+    QRegularExpression exp;
+    bool res = false;
+    bool searchedToReplace = false; // inside the first part of a replacement operator?
+    bool replacing = false; // inside the second part of a replacement operator?
+    bool isQuotingOperator = false;
+    int N;
+
+    if (pos == -1)
+    {
+        if (previousBlockState() != regexState
+            && previousBlockState() != regexExtraState
+            && previousBlockState() != regexSearchState)
+        {
+            exp = rExp;
+            N = 0;
+        }
+        else
+        {
+            QString delimStr;
+            bool between = false; // between search and replacement, like s(...)HERE(...)
+            bool ro = false; // a replacement operator?
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                {
+                    delimStr = prevData->labelInfo();
+                    if (delimStr.startsWith("r"))
+                    {
+                        ro = true;
+                        delimStr.remove (0, 1);
+                    }
+                    else if (delimStr == "b") // the real delimStr is found below
+                    {
+                        between = true;
+                        ro = true;
+                    }
+                }
+            }
+            if (delimStr.size() != 1) return false; // impossible
+            if (previousBlockState() == regexState
+                || previousBlockState() == regexExtraState)
+            {
+                N = 1;
+
+                if (previousBlockState() == regexState)
+                {
+                    if (between)
+                    {
+                        /* find the start of the replacement part */
+                        pos = text.indexOf (delimiterExp, 0);
+                        if (pos > -1)
+                            setFormat (0, pos + 1, regexFormat);
+                        else
+                        {
+                            setFormat (0, text.length(), regexFormat);
+                            return true;
+                        }
+                        replacing = true;
+                        delimStr = getEndDelimiter (QString (text.at (pos)));
+                    }
+                    else
+                    {
+                        pos = -2; // to know that the search in continued from the previous line
+                        if (ro) replacing = true;
+                    }
+                }
+                else
+                {
+                    pos = -2;
+                    isQuotingOperator = true;
+                }
+            }
+            else// if (previousBlockState() == regexSearchState) // for "s" and "tr"
+            {
+                N = 0;
+                searchedToReplace = true;
+            }
+            exp.setPattern ("\\" + getEndDelimiter (delimStr));
+            res = true;
+        }
+    }
+    else // a new search from the last position
+    {
+        exp = rExp;
+        N = 0;
+    }
+
+    int startPos = -1;
+    int nxtPos, capturedLength;
+    while ((nxtPos = findDelimiter (text, pos + 1, exp, capturedLength)) >= 0)
+    {
+        /* skip formatted comments and quotes */
+        QTextCharFormat fi = format (nxtPos);
+        if (N % 2 == 0)
+        {
+            isQuotingOperator = false;
+            if (fi == commentFormat || fi == urlFormat
+                || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+            {
+                pos = nxtPos; // don't add capturedLength because "/" might match later
+                continue;
+            }
+            if (!searchedToReplace)
+            {
+                isQuotingOperator = (text.at (nxtPos) == 'q'
+                                     && (capturedLength < 2 || text.at (nxtPos + 1) != 'r'));
+                startPos = nxtPos + capturedLength;
+            }
+        }
+
+        ++N;
+        if (N % 2 == 0
+            ? isEscapedRegexEndSign (text,
+                                     startPos < 0 ? qMax (0, pos + 1) : startPos,
+                                     nxtPos,
+                                     replacing || isQuotingOperator) // an escaped end delimiter
+            : (capturedLength > 1
+               ? isEscapedPerlRegex (text, nxtPos) // an escaped start sign
+               : (searchedToReplace
+                  ? isEscapedRegexEndSign (text,
+                                           startPos < 0 ? qMax (0, pos + 1) : startPos,
+                                           nxtPos) // an escaped middle delimiter
+                  : isEscapedPerlRegex (text, nxtPos)))) // an escaped start slash
+        {
+            if (res)
+            {
+                pos = qMax (pos, 0);
+                setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
+            }
+            if (N % 2 != 0 && capturedLength > 1)
+                pos = nxtPos; // don't add capturedLength because "/" might match later
+            else
+                pos = nxtPos + capturedLength - 1;
+            --N;
+            continue;
+        }
+
+        if (N % 2 == 0 || searchedToReplace)
+        {
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                data->insertLastFormattedRegex (nxtPos + capturedLength);
+            pos = qMax (pos, 0);
+            setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
+        }
+
+        if (index <= nxtPos) // they may be equal, as when "//" is at the end of "/...//"
+        {
+            if (N % 2 == 0)
+            {
+                res = true;
+                break;
+            }
+            else if (!searchedToReplace)
+            {
+                res = false;
+                break;
+            }
+            // otherwise, the formatting should continue until the replacement is done
+        }
+
+        if (searchedToReplace)
+        {
+            searchedToReplace = false;
+            replacing = true;
+        }
+        else
+            replacing = false;
+
+        /* NOTE: We should set "res" below because "pos" might be negative next time. */
+        if (N % 2 == 0)
+        {
+            exp = rExp;
+            res = false;
+        }
+        else
+        {
+            res = true;
+            if (capturedLength > 1)
+            {
+                exp.setPattern ("\\" + getEndDelimiter (QString (text.at (nxtPos + capturedLength - 1))));
+                if (text.at (nxtPos) == 's' || text.at (nxtPos) == 't' || text.at (nxtPos) == 'y')
+                {
+                    --N;
+                    searchedToReplace = true;
+                }
+            }
+            else
+            {
+                QString d (text.at (nxtPos));
+                if (!startBrace (d).isEmpty()) // between search and replacement
+                {
+                    /* find the start of the replacement part */
+                    pos = text.indexOf (delimiterExp, nxtPos + 1);
+                    if (pos > -1)
+                    {
+                        setFormat (nxtPos, pos - nxtPos + 1, regexFormat);
+                        exp.setPattern ("\\" + getEndDelimiter (QString (text.at (pos))));
+                        continue;
+                    }
+                    else
+                    {
+                        setFormat (nxtPos, text.length() - nxtPos, regexFormat);
+                        return true;
+                    }
+                }
+                // otherwise, the start delimiter of a simple operator has been found
+            }
+        }
+
+        pos = nxtPos + capturedLength - 1;
+    }
+
+    return res;
+}
+/*************************/
+void Highlighter::multiLinePerlRegex (const QString &text)
+{
+    int startIndex = 0;
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+    QRegularExpression endExp;
+    QTextCharFormat fi;
+    QString startDelimStr;
+    bool isQuotingOperator = false;
+    bool ro = false; // a replacement operator?
+    bool replacing = false; // inside the second part of a replacement operator?
+    bool afterHereDocDelimiter = false; // after a here-doc delimiter
+
+    QTextCharFormat flagFormat;
+    flagFormat.setFontWeight (QFont::Bold);
+    flagFormat.setForeground (Magenta);
+
+    int prevState = previousBlockState();
+    if (prevState == regexState
+        || prevState == regexExtraState
+        || prevState == regexSearchState)
+    {
+        bool between = false; // between search and replacement, like s(...)HERE(...)
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            {
+                startDelimStr = prevData->labelInfo();
+                if (startDelimStr.startsWith("r"))
+                {
+                    ro = true;
+                    startDelimStr.remove (0, 1);
+                }
+                else if (startDelimStr == "b") // the real startDelimStr is found below
+                {
+                    between = true;
+                    ro = true;
+                }
+            }
+        }
+        if (startDelimStr.size() != 1) return; // impossible
+        if (prevState == regexState)
+        {
+            if (between)
+            {
+                /* find the start of the replacement part */
+                startIndex = text.indexOf (delimiterExp, 0, &startMatch); // never escaped
+                if (startIndex == -1)
+                {
+                    setCurrentBlockState (regexState);
+                    setFormat (0, text.length(), regexFormat);
+                    /* "b" distinguishes this state */
+                    static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b");
+                    return;
+                }
+                setFormat (0, startIndex + startMatch.capturedLength(), regexFormat);
+                startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+                replacing = true;
+            }
+            else if (ro)
+                replacing = true;
+        }
+        else if (prevState == regexExtraState)
+            isQuotingOperator = true;
+    }
+    else
+    {
+        startIndex = text.indexOf (rExp, startIndex, &startMatch);
+        /* skip comments and quotations (all formatted to this point) */
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedPerlRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            /* search from the next position, without considering
+               the captured length, because "/" might match later */
+            startIndex = text.indexOf (rExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (startIndex >= 0)
+        {
+            startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+            if (startMatch.capturedLength() > 1)
+            {
+                if (text.at (startIndex) == 'q' && text.at (startIndex + 1) != 'r')
+                    isQuotingOperator = true;
+                else if (text.at (startIndex) == 's' || text.at (startIndex) == 't' || text.at (startIndex) == 'y')
+                    ro = true;
+                /* use flagFormat for operators too */
+                setFormat (startIndex, startMatch.capturedLength() - 1, flagFormat);
+            }
+
+            afterHereDocDelimiter = ((currentBlockState() >= endState || currentBlockState() < -1)
+                                     && currentBlockState() % 2 == 0);
+        }
+    }
+
+    while (startIndex >= 0)
+    {
+        /* continued from the previous line? */
+        bool continued (startIndex == 0
+                        && (prevState == regexState
+                            || prevState == regexExtraState
+                            || prevState == regexSearchState));
+
+        endExp.setPattern ("\\" + getEndDelimiter (startDelimStr));
+        int endLength;
+        int endIndex = findDelimiter (text,
+                                      continued
+                                          ? -1 // to know that the search is continued from the previous line
+                                          : startIndex + startMatch.capturedLength(),
+                                      endExp,
+                                      endLength);
+
+        int indx = continued ? 0 : startIndex + startMatch.capturedLength();
+        while (isEscapedRegexEndSign (text, indx, endIndex, replacing || isQuotingOperator))
+            endIndex = findDelimiter (text, endIndex + 1, endExp, endLength);
+
+        int len;
+        int keywordLength = qMax (startMatch.capturedLength() - 1, 0);
+        if (endIndex == -1)
+        {
+            if (!afterHereDocDelimiter) // don't let an incorrect regex ruin a here-doc
+            {
+                if (!continued)
+                {
+                    if (ro && !replacing)
+                        setCurrentBlockState (regexSearchState);
+                    else
+                        setCurrentBlockState (isQuotingOperator ? regexExtraState : regexState);
+                }
+                else
+                    setCurrentBlockState (prevState);
+
+                static_cast<TextBlockData *>(currentBlock().userData())->insertInfo (ro ? "r" + startDelimStr
+                                                                                        : startDelimStr);
+                /* NOTE: The next block will be rehighlighted at highlightBlock()
+                         (-> multiLineRegex (text, 0);) if the delimiter is changed. */
+            }
+            len = text.length() - startIndex;
+        }
+        else // endIndex is found
+        {
+            len = endIndex - startIndex + endLength;
+
+            if (continued)
+            {
+                if (prevState == regexSearchState)
+                {
+                    replacing = true;
+                    setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
+                    if (getEndDelimiter (startDelimStr) != startDelimStr) // regex replacement with braces
+                    {
+                        /* find the start of the replacement part */
+                        startIndex = text.indexOf (QRegularExpression (delimiterExp), endIndex + 1, &startMatch);
+                        if (startIndex == -1)
+                        { // the line ends between search and replacement
+                            setFormat (endIndex + 1, text.length() - endIndex - 1, regexFormat);
+                            setCurrentBlockState (regexState);
+                            /* the prefix "b" distinguishes this state */
+                            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b");
+                            return;
+                        }
+                        setFormat (endIndex + 1, startIndex + startMatch.capturedLength() - endIndex - 1, regexFormat);
+                        startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+                    }
+                    else
+                    {
+                        startMatch = QRegularExpressionMatch();
+                        startIndex = endIndex + 1;
+                    }
+                    continue;
+                }
+                // otherwise, the end delimiter of a simple operator or replacement part has been found
+            }
+            else
+            {
+                if (ro && !replacing)
+                {
+                    replacing = true;
+                    setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
+                    if (getEndDelimiter (startDelimStr) != startDelimStr) // regex replacement with braces
+                    {
+                        /* find the start of the replacement part */
+                        startIndex = text.indexOf (QRegularExpression (delimiterExp), endIndex + 1, &startMatch);
+                        if (startIndex == -1)
+                        { // the line ends between search and replacement
+                            setFormat (endIndex + 1, text.length() - endIndex - 1, regexFormat);
+                            setCurrentBlockState (regexState);
+                            /* the prefix "b" distinguishes this state */
+                            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b");
+                            return;
+                        }
+                        setFormat (endIndex + 1, startIndex + startMatch.capturedLength() - endIndex - 1, regexFormat);
+                        startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+                    }
+                    else // regex replacement with a middle delimiter
+                    {
+                        startMatch = QRegularExpressionMatch();
+                        startIndex = endIndex + 1;
+                    }
+                    continue;
+                }
+                // otherwise, the end delimiter of a simple operator or replacement part has been found
+            }
+        }
+        setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
+
+        /* format flags too */
+        if (text.mid (startIndex + len).indexOf (QRegularExpression ("^[" + flags + "]+"), 0, &startMatch) == 0)
+            setFormat (startIndex + len, startMatch.capturedLength(), flagFormat);
+
+        /* start searching for a new regex (operator) */
+        isQuotingOperator = false;
+        ro = false;
+        replacing = false;
+        startIndex = text.indexOf (rExp, startIndex + len, &startMatch);
+        /* skip comments and quotations again */
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedPerlRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            startIndex = text.indexOf (rExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (startIndex >= 0)
+        {
+            startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+            if (startMatch.capturedLength() > 1)
+            {
+                if (text.at (startIndex) == 'q' && text.at (startIndex + 1) != 'r')
+                    isQuotingOperator = true;
+                else if (text.at (startIndex) == 's' || text.at (startIndex) == 't' || text.at (startIndex) == 'y')
+                    ro = true;
+                setFormat (startIndex, startMatch.capturedLength() - 1, flagFormat);
+            }
+        }
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-regex.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-regex.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-regex.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-regex.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,418 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2018-2020 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+static const QRegularExpression regexStartExp ("/");
+static const QRegularExpression regexEndExp ("/[A-Za-z0-9_]*");
+
+// This is only for the starting "/".
+bool Highlighter::isEscapedRegex (const QString &text, const int pos)
+{
+    if (pos < 0) return false;
+    if (progLan != "javascript" && progLan != "qml")
+        return false;
+
+    if (format (pos) == quoteFormat || format (pos) == altQuoteFormat
+        || format (pos) == commentFormat || format (pos) == urlFormat)
+    {
+        return true;
+    }
+
+    if (isMLCommented (text, pos, commentState)
+        || isMLCommented (text, pos, htmlJavaCommentState))
+    {
+        return true;
+    }
+
+    /* escape "<.../>", "</...>", the single-line comment sign
+       and the start multiline comment sign
+       FIXME: In this way and with what follows, "/>/g" isn't highlighted. */
+    if ((text.length() > pos + 1 && ((progLan == "javascript" && text.at (pos + 1) == '>')
+                                     || text.at (pos + 1) == '/' || text.at (pos + 1) == '*'))
+        || (pos > 0 && progLan == "javascript" && text.at (pos - 1) == '<'))
+    {
+        return true;
+    }
+
+    QRegularExpressionMatch keyMatch;
+    static QRegularExpression jsKeys, qmlKeys;
+
+    int i = pos - 1;
+    while (i >= 0 && (text.at (i) == ' ' || text.at (i) == '\t'))
+        --i;
+    if (i == -1) // examine the previous line(s)
+    {
+        /* NOTE: regexExtraState is already applied to:
+                 1) Single-line comments;
+                 2) Lines ending with single/double quotations
+                    but without end quote; and
+                 3) Lines ending with regex plus spaces. */
+        QTextBlock prev = currentBlock().previous();
+        if (!prev.isValid()) return false;
+        QString txt = prev.text();
+        QRegularExpression nonSpace ("[^\\s]+");
+        while (txt.indexOf (nonSpace, 0) == -1)
+        {
+            if (prev.userState() == regexExtraState)
+            { // a quoted line with only witespaces (backslashed mutil-line quote)
+                return false;
+            }
+            prev.setUserState (updateState); // update the next line if this one changes
+            prev = prev.previous();
+            if (!prev.isValid()) return false;
+            txt = prev.text();
+        }
+        int last = txt.length() - 1;
+        QChar ch = txt.at (last);
+        while (ch == ' ' || ch == '\t')
+        {
+            --last;
+            ch = txt.at (last);
+        }
+        if (prev.userState() == regexExtraState)
+        {
+            /* a regex isn't escaped if it follows another one,
+               a single-line comment or a quotation (without an end quote) */
+            return false;
+        }
+        else
+        {
+            prev.setUserState (updateState); // update the next line if this one changes
+            if (ch.isNumber() || ch == '_'
+                /* as with Kate */
+                || ch == ')' || ch == ']' || ch == '$' || ch == '\"' || ch == '\'' || ch == '`'
+                /* also skip "/>" */
+                || (last > 0 && ch == '>' && txt.at (last - 1) == '/' && progLan == "javascript"))
+            {
+                return true;
+            }
+            if (ch.isLetter())
+            { // a regex isn't escaped if it follows a JavaScript keyword
+                if (progLan == "javascript")
+                {
+                    if (jsKeys.pattern().isEmpty())
+                        jsKeys.setPattern (keywords (progLan).join ('|'));
+                }
+                else
+                {
+                    if (qmlKeys.pattern().isEmpty())
+                        qmlKeys.setPattern (keywords (progLan).join ('|'));
+                }
+                int len = qMin (12, last + 1);
+                QString str = txt.mid (last - len + 1, len);
+                int j;
+                if ((j = str.lastIndexOf (progLan == "javascript" ? jsKeys : qmlKeys, -1, &keyMatch)) > -1
+                    && j + keyMatch.capturedLength() == len)
+                {
+                    return false;
+                }
+                return true;
+            }
+        }
+    }
+    else
+    { // a regex isn't escaped if it follows another one or a JavaScript keyword
+        if (format (i) == regexFormat)
+            return false;
+        QChar ch = text.at (i);
+        if (/* as with Kate */
+            ch == ')' || ch == ']' || ch == '$' || ch == '\"' || ch == '\'' || ch == '`'
+            /* also skip "/>" */
+            || (i > 0 && ch == '>' && text.at (i - 1) == '/' && progLan == "javascript"))
+        {
+            return true;
+        }
+        if (ch.isLetterOrNumber() || ch == '_')
+        {
+            int j;
+            if ((j = text.lastIndexOf (QRegularExpression("/\\w+"), i + 1, &keyMatch)) > -1
+                && j + keyMatch.capturedLength() == i + 1 && format (j) == regexFormat)
+            {
+                return false;
+            }
+            if (ch.isLetter())
+            {
+                if (progLan == "javascript")
+                {
+                    if (jsKeys.pattern().isEmpty())
+                        jsKeys.setPattern (keywords (progLan).join ('|'));
+                }
+                else
+                {
+                    if (qmlKeys.pattern().isEmpty())
+                        qmlKeys.setPattern (keywords (progLan).join ('|'));
+                }
+                int len = qMin (12, i + 1);
+                QString str = text.mid (i - len + 1, len);
+                if ((j = str.lastIndexOf (progLan == "javascript" ? jsKeys : qmlKeys, -1, &keyMatch)) > -1
+                    && j + keyMatch.capturedLength() == len)
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    return false;
+}
+/*************************/
+// May be used for middle signs (e.g., "/") too. FIXME: Multi-line classes aren't supported.
+bool Highlighter::isEscapedRegexEndSign (const QString &text, const int start, const int pos,
+                                         bool ignoreClasses) const
+{
+    if (pos < 1) return false;
+    if (isEscapedChar (text, pos))
+        return true;
+    if (!ignoreClasses)
+    {
+        /* check if it's inside a class */
+        int i = pos - 1;
+        while (i >= start)
+        {
+            if (text.at (i) == ']' && !isEscapedChar (text, i))
+                return false;
+            if (text.at (i) == '[' && !isEscapedChar (text, i))
+                return true;
+            --i;
+        }
+    }
+    return false;
+}
+/*************************/
+// For faster processing with very long lines, this function also highlights regex patterns.
+// (It should be used with care because it gives correct results only in special places.)
+bool Highlighter::isInsideRegex (const QString &text, const int index)
+{
+    if (progLan == "perl") return isInsidePerlRegex (text, index);
+    if (progLan == "ruby") return isInsideRubyRegex (text, index);
+
+    if (index < 0) return false;
+    if (progLan != "javascript" && progLan != "qml")
+        return false;
+
+    int pos = -1;
+
+    if (format (index) == regexFormat)
+        return true;
+    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+    {
+        pos = data->lastFormattedRegex() - 1;
+        if (index <= pos) return false;
+    }
+
+    QRegularExpressionMatch match;
+    QRegularExpression exp;
+    bool res = false;
+    int N;
+
+    if (pos == -1)
+    {
+        if (previousBlockState() != regexState)
+        {
+            exp = regexStartExp;
+            N = 0;
+        }
+        else
+        {
+            exp = regexEndExp;
+            N = 1;
+            res = true;
+        }
+    }
+    else // a new search from the last position
+    {
+        exp = regexStartExp;
+        N = 0;
+    }
+
+    int nxtPos;
+    while ((nxtPos = text.indexOf (exp, pos + 1, &match)) >= 0)
+    {
+        /* skip formatted comments and quotes */
+        QTextCharFormat fi = format (nxtPos);
+        if (N % 2 == 0
+            && (fi == commentFormat || fi == urlFormat
+                || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            pos = nxtPos;
+            continue;
+        }
+
+        ++N;
+        if ((N % 2 == 0 && isEscapedRegexEndSign (text, pos + 1, nxtPos)) // an escaped end sign
+            || (N % 2 != 0 && isEscapedRegex (text, nxtPos))) // or an escaped start sign
+        {
+            if (res)
+            {
+                pos = qMax (pos, 0);
+                setFormat (pos, nxtPos - pos + match.capturedLength(), regexFormat);
+            }
+            --N;
+            pos = nxtPos;
+            continue;
+        }
+
+        if (N % 2 == 0)
+        {
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                data->insertLastFormattedRegex (nxtPos + match.capturedLength());
+            pos = qMax (pos, 0);
+            setFormat (pos, nxtPos - pos + match.capturedLength(), regexFormat);
+        }
+
+        if (index <= nxtPos) // they may be equal, as in "/...//" or "/.../*"
+        {
+            if (N % 2 == 0) res = true;
+            else res = false;
+            break;
+        }
+
+        if (N % 2 == 0)
+        {
+            exp = regexStartExp;
+            res = false;
+        }
+        else
+        {
+            exp = regexEndExp;
+            res = true;
+        }
+
+        pos = nxtPos;
+    }
+
+    return res;
+}
+/*************************/
+void Highlighter::multiLineRegex(const QString &text, const int index)
+{
+    if (progLan == "perl")
+    {
+        multiLinePerlRegex (text);
+        return;
+    }
+    if (progLan == "ruby")
+    {
+        multiLineRubyRegex (text);
+        return;
+    }
+
+    if (index < 0) return;
+    if (progLan != "javascript" && progLan != "qml")
+        return;
+
+    int prevState = previousBlockState();
+
+    if (index == 0 && prevState == -1 && text.startsWith ("#!"))
+    { // a special case at the start of the first line (hash-bang)
+        setFormat (0, text.length(), commentFormat);
+        return;
+    }
+
+    int startIndex = index;
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+    QTextCharFormat fi;
+
+    if (prevState != regexState || startIndex > 0)
+    {
+        startIndex = text.indexOf (regexStartExp, startIndex, &startMatch);
+        /* skip comments and quotations (all formatted to this point) */
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            startIndex = text.indexOf (regexStartExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+    }
+
+    while (startIndex >= 0)
+    {
+        int endIndex, indx;
+        /* when the start sign is in the prvious line
+           and the search for the end sign has just begun,
+           search for the end sign from the line start */
+        if (prevState == regexState && startIndex == 0)
+        {
+            indx = 0;
+            endIndex = text.indexOf (regexEndExp, 0, &endMatch);
+        }
+        else
+        {
+            indx = startIndex + startMatch.capturedLength();
+            endIndex = text.indexOf (regexEndExp, indx, &endMatch);
+        }
+
+        while (isEscapedRegexEndSign (text, indx, endIndex))
+            endIndex = text.indexOf (regexEndExp, endIndex + 1, &endMatch);
+
+        int len;
+        if (endIndex == -1)
+        {
+            setCurrentBlockState (regexState);
+            len = text.length() - startIndex;
+        }
+        else
+        {
+            len = endIndex - startIndex
+                  + endMatch.capturedLength();
+        }
+        setFormat (startIndex, len, regexFormat);
+
+        startIndex = text.indexOf (regexStartExp, startIndex + len, &startMatch);
+
+        /* skip comments and quotations again */
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            startIndex = text.indexOf (regexStartExp, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+    }
+
+    /* If this line ends with a regex plus spaces, give it a special
+       state to decide about the probable regex of its following line
+       and also for that line to be updated when this state is toggled.
+       See isEscapedRegex(). */
+    if (currentBlockState() == 0 && !text.isEmpty())
+    {
+        int last = text.length() - 1;
+        QChar ch = text.at (last);
+        while (ch == ' ' || ch == '\t')
+        {
+            --last;
+            if (last < 0) return;
+            ch = text.at (last);
+        }
+        if (format (last) == regexFormat)
+            setCurrentBlockState (regexExtraState);
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-rest.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-rest.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-rest.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-rest.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,461 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+void Highlighter::reSTMainFormatting (int start, const QString &text)
+{
+    if (start < 0) return;
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    if (data == nullptr) return;
+
+    data->setHighlighted(); // completely highlighted
+    for (const HighlightingRule &rule : qAsConst (highlightingRules))
+    {
+        QTextCharFormat fi;
+        QRegularExpressionMatch match;
+        int index = text.indexOf (rule.pattern, start, &match);
+        if (rule.format != whiteSpaceFormat)
+        {
+            fi = format (index);
+            while (index >= 0 && fi != mainFormat)
+            {
+                index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                fi = format (index);
+            }
+        }
+        while (index >= 0)
+        {
+            /* get the overwritten format if existent */
+            QTextCharFormat prevFormat = format (index + match.capturedLength() - 1);
+
+            setFormat (index, match.capturedLength(), rule.format);
+            if (rule.pattern == QRegularExpression (":[\\w\\-+]+:`[^`]*`"))
+            { // format the reference start too
+                QTextCharFormat boldFormat = neutralFormat;
+                boldFormat.setFontWeight (QFont::Bold);
+                setFormat (index, text.indexOf (":`", index) - index + 1, boldFormat);
+            }
+            index += match.capturedLength();
+
+            if (rule.format != whiteSpaceFormat && prevFormat != mainFormat)
+            { // if a format is overwriiten by this rule, reformat from here
+                setFormat (index, text.length() - index, mainFormat);
+                reSTMainFormatting (index, text);
+                break;
+            }
+
+            index = text.indexOf (rule.pattern, index, &match);
+            if (rule.format != whiteSpaceFormat)
+            {
+                fi = format (index);
+                while (index >= 0 && fi != mainFormat)
+                {
+                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
+                    fi = format (index);
+                }
+            }
+        }
+    }
+}
+/*************************/
+void Highlighter::highlightReSTBlock (const QString &text)
+{
+    int index;
+    TextBlockData *data = new TextBlockData;
+    data->setLastState (currentBlockState());
+    setCurrentBlockUserData (data);
+    setCurrentBlockState (0);
+
+    /*******************************
+    * reST Code and Comment Blocks *
+    ********************************/
+    QRegularExpressionMatch match;
+    QTextBlock prevBlock = currentBlock().previous();
+    static const QRegularExpression codeBlockStart1 ("^\\.{2} code-block::");
+    static const QRegularExpression codeBlockStart2 ("^(?!\\s*\\.{2}\\s+).*::$");
+    static const QRegularExpression restComment ("^\\s*\\.{2}"
+                                                 "(?!("
+                                                     /* not a label or substitution (".. _X:" or ".. |X| Y::") */
+                                                     " _[\\w\\s\\-+]*:(?!\\S)"
+                                                     "|"
+                                                     " \\|[\\w\\s]+\\|\\s+\\w+::(?!\\S)"
+                                                     "|"
+                                                     /* not a footnote (".. [#X]") */
+                                                     " (\\[(\\w|\\s|-|\\+|\\*)+\\]|\\[#(\\w|\\s|-|\\+)*\\])\\s+"
+                                                     "|"
+                                                     /* not ".. X::" */
+                                                     " (\\w|-)+::(?!\\S)"
+                                                 "))"
+                                                 "\\s+.*");
+    /* definitely, the start of a code block */
+    if (text.indexOf (codeBlockStart1, 0, &match) == 0)
+    { // also overwrites commentFormat
+        /* the ".. code-block::" part will be formatted later */
+        setFormat (match.capturedLength(), text.count() - match.capturedLength(), codeBlockFormat);
+        setCurrentBlockState (codeBlockState);
+    }
+    /* perhaps the start of a code block */
+    else if (text.indexOf (codeBlockStart2) == 0)
+    {
+        bool isCommented (false);
+        if (previousBlockState() >= endState || previousBlockState() < -1)
+        {
+            int spaces = text.indexOf (QRegularExpression ("\\S"));
+            if (spaces > 0)
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                {
+                    QString prevLabel = prevData->labelInfo();
+                    if (prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
+                    { // not a code block start but a comment
+                        isCommented = true;
+                        setFormat (0, text.count(), commentFormat);
+                        setCurrentBlockState (previousBlockState());
+                        data->insertInfo (prevLabel);
+                    }
+                }
+            }
+        }
+        /* definitely, the start of a code block */
+        if (!isCommented)
+        {
+            QTextCharFormat blockFormat = codeBlockFormat;
+            blockFormat.setFontWeight (QFont::Bold);
+            setFormat (text.count() - 2,  2, blockFormat);
+            setCurrentBlockState (codeBlockState);
+        }
+    }
+    /* perhaps a comment */
+    else if (text.indexOf (restComment) == 0)
+    {
+        bool isCodeLine (false);
+        QString prevLabel;
+        if (previousBlockState() == codeBlockState
+            || previousBlockState() >= endState || previousBlockState() < -1)
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            {
+                prevLabel = prevData->labelInfo();
+                if (prevLabel.isEmpty()
+                    || (!prevLabel.startsWith ("c") && text.startsWith (prevLabel)))
+                { // not a commnt but a code line
+                    isCodeLine = true;
+                    if (prevLabel.isEmpty())
+                    { // the code block was started or kept in the previous line
+                        int spaces = text.indexOf (QRegularExpression ("\\S"));
+                        if (spaces == -1) // spaces only keep the code block
+                            setCurrentBlockState (codeBlockState);
+                        else
+                        { // a code line
+                            setFormat (0, text.count(), codeBlockFormat);
+                            if (spaces == 0) // a line without indent only keeps the code block
+                                setCurrentBlockState (codeBlockState);
+                            else
+                            {
+                                /* remember the starting spaces */
+                                QString spaceStr = text.left (spaces);
+                                data->insertInfo (spaceStr);
+                                /* also, the state should depend on the starting spaces */
+                                int n = static_cast<int>(qHash (spaceStr));
+                                int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0));
+                                setCurrentBlockState (state);
+                            }
+                        }
+                    }
+                    else
+                    {
+                        setFormat (0, text.count(), codeBlockFormat);
+                        setCurrentBlockState (previousBlockState());
+                        data->insertInfo (prevLabel);
+                    }
+                }
+            }
+        }
+        /* definitely a comment */
+        if (!isCodeLine)
+        {
+            setFormat (0, text.count(), commentFormat);
+            if ((previousBlockState() >= endState || previousBlockState() < -1)
+                && prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
+            {
+                setCurrentBlockState (previousBlockState());
+                data->insertInfo (prevLabel);
+            }
+            else
+            {
+                /* remember the starting spaces (which consists of 3 spaces at least)
+                    but add a "c" to its beginning to distinguish it from a code block */
+                QString spaceStr;
+                int spaces = text.indexOf (QRegularExpression ("\\S"));
+                if (spaces == -1)
+                    spaceStr = "c   ";
+                else
+                    spaceStr = "c" + text.left (spaces) + "   ";
+                data->insertInfo (spaceStr);
+                /* also, the state should depend on the starting spaces */
+                int n = static_cast<int>(qHash (spaceStr));
+                int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0)); // always an even number but maybe negative
+                setCurrentBlockState (state);
+            }
+        }
+    }
+    /* now, everything depends on the previous block */
+    else if (prevBlock.isValid())
+    {
+        if (previousBlockState() == codeBlockState)
+        { // the code block was started or kept in the previous line
+            int spaces = text.indexOf (QRegularExpression ("\\S"));
+            if (text.isEmpty() || spaces == -1) // spaces only keep the code block
+                setCurrentBlockState (codeBlockState);
+            else
+            { // a code line
+                setFormat (0, text.count(), codeBlockFormat);
+                if (spaces == 0) // a line without indent only keeps the code block
+                    setCurrentBlockState (codeBlockState);
+                else
+                {
+                    /* remember the starting spaces */
+                    QString spaceStr = text.left (spaces);
+                    data->insertInfo (spaceStr);
+                    /* also, the state should depend on the starting spaces */
+                    int n = static_cast<int>(qHash (spaceStr));
+                    int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0));
+                    setCurrentBlockState (state);
+                }
+            }
+        }
+        else if (previousBlockState() >= endState || previousBlockState() < -1)
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            {
+                QString prevLabel = prevData->labelInfo();
+                if (text.isEmpty()
+                    || ((prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
+                        || text.startsWith (prevLabel)))
+                {
+                    setCurrentBlockState (previousBlockState());
+                    data->insertInfo (prevLabel);
+                    if (prevLabel.startsWith ("c")) // a comment continues
+                        setFormat (0, text.count(), commentFormat);
+                    else
+                        setFormat (0, text.count(), codeBlockFormat);
+                }
+            }
+        }
+    }
+
+    /***********************
+    * reST Main Formatting *
+    ************************/
+    int bn = currentBlock().blockNumber();
+    if (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber())
+        reSTMainFormatting (0, text);
+
+    /*********************************************
+     * Parentheses, Braces and brackets Matching *
+     *********************************************/
+
+    /* left parenthesis */
+    QTextCharFormat fi;
+    index = text.indexOf ('(');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi == regexFormat))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == regexFormat))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-ruby.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-ruby.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-ruby.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-ruby.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+/* we include "%", "%Q", "%q", "%W", "%w", "%x" ans "%s" here to have a simpler code */
+static const QRegularExpression rubyRegex ("/|%(Q|q|W|w|x|r|s)?\\s*[^\\w\\}\\)\\]>\\s]");
+
+// This is only for the start.
+bool Highlighter::isEscapedRubyRegex (const QString &text, const int pos)
+{
+    if (pos < 0) return false;
+    if (format (pos) == quoteFormat || format (pos) == altQuoteFormat
+        || format (pos) == commentFormat || format (pos) == urlFormat)
+    {
+        return true;
+    }
+    if (text.at (pos) == '/' && isEscapedChar (text, pos))
+        return true;
+
+    QChar ch;
+    int i = pos - 1;
+    if (i > -1)
+    {
+        ch = text.at (i);
+        if (ch.isLetterOrNumber() || ch == '_')
+            return true;
+    }
+
+    while (i >= 0 && (text.at (i) == ' ' || text.at (i) == '\t'))
+        --i;
+    if (i > -1)
+    {
+        ch = text.at (i);
+        if (ch == ')' || ch == ']' || ch == '}')
+            return true;
+        bool isString (false);
+        if (ch.isNumber())
+        { // check if this is really a number
+            --i;
+            while (i >= 0 && text.at (i).isNumber())
+                --i;
+            if (i == -1 || (!text.at (i).isLetter() && text.at (i) != '_'))
+                return true;
+            isString = true;
+        }
+        /* as with Kate */
+        if ((isString || ch.isLetter() || ch == '_')
+            && pos + 1 < text.length() && text.at (pos + 1).isSpace())
+        {
+            return true;
+        }
+    }
+
+    return false;
+}
+/*************************/
+// Takes care of open braces too.
+int Highlighter::findRubyDelimiter (const QString &text, const int index,
+                                    const QRegularExpression &delimExp, int &capturedLength) const
+{
+    int i = qMax (index, 0);
+    const QString pattern = delimExp.pattern();
+    if (pattern.startsWith ("\\")
+        && (pattern.endsWith (")") || pattern.endsWith ("}")
+            || pattern.endsWith ("]") || pattern.endsWith (">")))
+    { // the end delimiter should be found
+        int N = 1;
+        if (index < 0)
+        {
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    N = prevData->openNests();
+            }
+        }
+        QChar endBrace = pattern.at (pattern.size() - 1);
+        QChar startBrace = endBrace == ')' ? '('
+                           : endBrace == '}' ? '{'
+                           : endBrace == ']' ? '['
+                           : '<';
+        const int L = text.length();
+        while (N > 0 && i < L)
+        {
+            QChar c = text.at (i);
+            if (c == endBrace)
+            {
+                if (!isEscapedChar (text, i))
+                    -- N;
+            }
+            else if (c == startBrace && !isEscapedChar (text, i))
+                ++ N;
+            ++ i;
+        }
+        if (N == 0)
+        {
+            if (i == 0) // doesn't happen
+            {
+                int res = text.indexOf (delimExp, 0);
+                capturedLength = res == -1 ? 0 : 1;
+                return res;
+            }
+            else
+            {
+                capturedLength = 1;
+                return i - 1;
+            }
+        }
+        else
+        {
+            static_cast<TextBlockData *>(currentBlock().userData())->insertNestInfo (N);
+            capturedLength = 0;
+            return -1;
+        }
+    }
+    else
+    {
+        QRegularExpressionMatch match;
+        int res = text.indexOf (delimExp, i, &match);
+        capturedLength = match.capturedLength();
+        return res;
+    }
+}
+/*************************/
+static inline QString getRubyEndDelimiter (const QString &brace)
+{
+    if (brace == "(")
+        return ")";
+    if (brace == "{")
+        return "}";
+    if (brace == "[")
+        return "]";
+    if (brace == "<")
+        return ">";
+    return brace;
+}
+/*************************/
+bool Highlighter::isInsideRubyRegex (const QString &text, const int index)
+{
+    if (index < 0) return false;
+
+    int pos = -1;
+
+    if (format (index) == regexFormat)
+        return true;
+    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+    {
+        pos = data->lastFormattedRegex() - 1;
+        if (index <= pos) return false;
+    }
+
+    QRegularExpression exp;
+    bool res = false;
+    int N;
+
+    if (pos == -1)
+    {
+        if (previousBlockState() != regexState)
+        {
+            exp = rubyRegex;
+            N = 0;
+        }
+        else
+        {
+            QString delimStr;
+            QTextBlock prevBlock = currentBlock().previous();
+            if (prevBlock.isValid())
+            {
+                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                    delimStr = prevData->labelInfo();
+            }
+            if (delimStr.isEmpty()) return false; // impossible
+
+            N = 1;
+            pos = -2; // to know that the search in continued from the previous line
+            exp.setPattern ("\\" + getRubyEndDelimiter (delimStr));
+            res = true;
+        }
+    }
+    else // a new search from the last position
+    {
+        exp = rubyRegex;
+        N = 0;
+    }
+
+    int nxtPos, capturedLength;
+    while ((nxtPos = findRubyDelimiter (text, pos + 1, exp, capturedLength)) >= 0)
+    {
+        /* skip formatted comments and quotes */
+        QTextCharFormat fi = format (nxtPos);
+        if (N % 2 == 0)
+        {
+            if (fi == commentFormat || fi == urlFormat
+                || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
+            {
+                pos = nxtPos; // don't add capturedLength because "/" might match later
+                continue;
+            }
+        }
+
+        ++N;
+        if (N % 2 == 0
+            ? isEscapedChar (text, nxtPos) // an escaped end delimiter
+            : isEscapedRubyRegex (text, nxtPos)) // an escaped start delmiter
+        {
+            if (res)
+            {
+                pos = qMax (pos, 0);
+                setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
+            }
+            if (N % 2 != 0 && capturedLength > 1)
+                pos = nxtPos; // don't add capturedLength because "/" might match later
+            else
+                pos = nxtPos + capturedLength - 1;
+            --N;
+            continue;
+        }
+
+        if (N % 2 == 0)
+        {
+            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
+                data->insertLastFormattedRegex (nxtPos + capturedLength);
+            pos = qMax (pos, 0);
+            setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
+        }
+
+        if (index <= nxtPos)
+        {
+            if (N % 2 == 0)
+            {
+                res = true;
+                break;
+            }
+            else
+            {
+                res = false;
+                break;
+            }
+        }
+
+        /* we should set "res" below because "pos" might be negative next time. */
+        if (N % 2 == 0)
+        {
+            exp = rubyRegex;
+            res = false;
+        }
+        else
+        {
+            exp.setPattern ("\\" + getRubyEndDelimiter (QString (text.at (nxtPos + capturedLength - 1))));
+            res = true;
+        }
+
+        pos = nxtPos + capturedLength - 1;
+    }
+
+    return res;
+}
+/*************************/
+void Highlighter::multiLineRubyRegex (const QString &text)
+{
+    int startIndex = 0;
+    QRegularExpressionMatch startMatch;
+    QRegularExpressionMatch endMatch;
+    QRegularExpression endExp;
+    QTextCharFormat fi;
+    QString startDelimStr;
+
+    int prevState = previousBlockState();
+    if (prevState == regexState)
+    {
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+                startDelimStr = prevData->labelInfo();
+        }
+        if (startDelimStr.isEmpty()) return; // impossible
+    }
+    else
+    {
+        startIndex = text.indexOf (rubyRegex, startIndex, &startMatch);
+        /* skip comments and quotations (all formatted to this point) */
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedRubyRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            /* search from the next position, without considering
+               the captured length, because "/" might match later */
+            startIndex = text.indexOf (rubyRegex, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (startIndex >= 0)
+            startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+    }
+
+    while (startIndex >= 0)
+    {
+        endExp.setPattern ("\\" + getRubyEndDelimiter (startDelimStr));
+        int endLength;
+        int endIndex = findRubyDelimiter (text,
+                                          (startIndex == 0 && prevState == regexState)
+                                              ? -1 // to know that the search is continued from the previous line
+                                              : startIndex + startMatch.capturedLength(),
+                                          endExp,
+                                          endLength);
+
+        while (endIndex > -1 && isEscapedChar (text, endIndex))
+            endIndex = findRubyDelimiter (text, endIndex + 1, endExp, endLength);
+
+        int len;
+        int keywordLength = qMax (startMatch.capturedLength() - 1, 0);
+        if (endIndex == -1)
+        {
+            len = text.length() - startIndex;
+            setCurrentBlockState (regexState);
+
+            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo (startDelimStr);
+            /* NOTE: The next block will be rehighlighted at highlightBlock()
+                        (-> multiLineRegex (text, 0);) if the delimiter is changed. */
+        }
+        else
+            len = endIndex - startIndex + endLength;
+        setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
+
+        startIndex = text.indexOf (rubyRegex, startIndex + len, &startMatch);
+        fi = format (startIndex);
+        while (startIndex >= 0
+               && (isEscapedRubyRegex (text, startIndex)
+                   || fi == commentFormat || fi == urlFormat
+                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
+        {
+            startIndex = text.indexOf (rubyRegex, startIndex + 1, &startMatch);
+            fi = format (startIndex);
+        }
+        if (startIndex >= 0)
+            startDelimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-sh.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-sh.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-sh.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-sh.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,477 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+// multi/single-line quote highlighting for bash.
+void Highlighter::SH_MultiLineQuote (const QString &text)
+{
+    int index = 0;
+    QRegularExpressionMatch quoteMatch;
+    QRegularExpression quoteExpression = mixedQuoteMark;
+    int initialState = currentBlockState();
+    int prevState = previousBlockState();
+
+    bool wasDQuoted (prevState == doubleQuoteState
+                     || prevState == SH_MixedDoubleQuoteState || prevState == SH_MixedSingleQuoteState);
+    bool wasQuoted (wasDQuoted || prevState == singleQuoteState);
+    QTextBlock prevBlock = currentBlock().previous();
+    TextBlockData *prevData = nullptr;
+    if (prevBlock.isValid())
+    {
+        prevData = static_cast<TextBlockData *>(prevBlock.userData());
+        if (prevData && prevData->getProperty())
+        { // at the end delimiter of a here-doc starting like VAR="$(cat<<EOF
+            wasQuoted = wasDQuoted = true;
+        }
+    }
+
+    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
+    int hereDocDelimPos = -1;
+    if (!curData->labelInfo().isEmpty()) // the label is delimStr
+    {
+        hereDocDelimPos = text.indexOf (hereDocDelimiter);
+        while (hereDocDelimPos > -1 && isQuoted (text, hereDocDelimPos, true))
+        { // see isHereDocument()
+            hereDocDelimPos = text.indexOf (hereDocDelimiter, hereDocDelimPos + 2);
+        }
+    }
+
+    /* find the start quote */
+    if (!wasQuoted)
+    {
+        index = text.indexOf (quoteExpression);
+        /* skip escaped start quotes and all comments */
+        while (SH_SkipQuote (text, index, true))
+            index = text.indexOf (quoteExpression, index + 1);
+
+        /* check if the first quote is after the here-doc start delimiter */
+        if (index >= 0 && hereDocDelimPos > -1 && index > hereDocDelimPos)
+            index = -1;
+
+        /* if the start quote is found... */
+        if (index >= 0)
+        {
+            /* ... distinguish between double and single quotes */
+            if (text.at (index) == quoteMark.pattern().at (0))
+                quoteExpression = quoteMark;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+    }
+    else // but if we're inside a quotation
+    {
+        /* ... distinguish between the two quote kinds
+           by checking the previous line */
+        if (wasDQuoted)
+            quoteExpression = quoteMark;
+        else
+            quoteExpression = singleQuoteMark;
+    }
+
+    while (index >= 0)
+    {
+        /* if the search is continued... */
+        if (quoteExpression == mixedQuoteMark)
+        {
+            /* ... distinguish between double and single quotes
+               again because the quote mark may have changed */
+            if (text.at (index) == quoteMark.pattern().at (0))
+                quoteExpression = quoteMark;
+            else
+                quoteExpression = singleQuoteMark;
+        }
+
+        int endIndex;
+        /* if there's no start quote ... */
+        if (index == 0 && wasQuoted)
+        {
+            /* ... search for the end quote from the line start */
+            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
+        }
+        else // otherwise, search for the end quote from the start quote
+            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
+
+        /* check if the end quote is escaped */
+        while (SH_SkipQuote (text, endIndex, false))
+            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
+
+        int quoteLength;
+        if (endIndex == -1)
+        {
+            if (quoteExpression != quoteMark || hereDocDelimPos == -1)
+            {
+                setCurrentBlockState (quoteExpression == quoteMark
+                                                         ? initialState == SH_DoubleQuoteState
+                                                           ? SH_MixedDoubleQuoteState
+                                                           : initialState == SH_SingleQuoteState
+                                                             ? SH_MixedSingleQuoteState
+                                                             : doubleQuoteState
+                                                         : singleQuoteState);
+            }
+            else if (curData->openNests() > 0) // like VAR="$(cat<<EOF
+                curData->setProperty (true); // initialState is always that of here-doc
+            quoteLength = text.length() - index;
+        }
+        else
+        {
+            quoteLength = endIndex - index
+                          + quoteMatch.capturedLength(); // 1
+        }
+        if (quoteExpression == quoteMark)
+            setFormatWithoutOverwrite (index, quoteLength, quoteFormat, neutralFormat);
+        else
+            setFormat (index, quoteLength, altQuoteFormat);
+
+        QString str = text.mid (index, quoteLength);
+        int urlIndex = 0;
+        QRegularExpressionMatch urlMatch;
+        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
+        {
+             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
+             urlIndex += urlMatch.capturedLength();
+        }
+
+        /* the next quote may be different */
+        quoteExpression = mixedQuoteMark;
+        index = text.indexOf (quoteExpression, index + quoteLength);
+
+        /* skip escaped start quotes and all comments */
+        while (SH_SkipQuote (text, index, true))
+            index = text.indexOf (quoteExpression, index + 1);
+
+        /* check if the first quote is after the here-doc start delimiter */
+        if (hereDocDelimPos > -1 && index > hereDocDelimPos)
+            index = -1;
+    }
+}
+/*************************/
+// The bash quotes that should be skipped while multiline quotes are being highlighted.
+bool Highlighter::SH_SkipQuote (const QString &text, const int pos, bool isStartQuote)
+{
+    if (isEscapedQuote (text, pos, isStartQuote))
+        return true;
+    QTextCharFormat fi = format (pos);
+    return (fi == neutralFormat // not needed
+            || fi == commentFormat
+            || fi == urlFormat
+            || fi == quoteFormat
+            || fi == altQuoteFormat
+            || fi == urlInsideQuoteFormat);
+}
+/*************************/
+// Formats the text inside a command substitution variable character by character,
+// considering single and double quotes, code block start and end, and comments.
+int Highlighter::formatInsideCommand (const QString &text,
+                                      const int minOpenNests, int &nests, QSet<int> &quotes,
+                                      const bool isHereDocStart, const int index)
+{
+    int p = 0;
+    int indx = index;
+    bool doubleQuoted (quotes.contains (nests));
+    bool comment (false);
+    int initialOpenNests = nests;
+    while (nests > minOpenNests && indx < text.length())
+    {
+        while (format (indx) == commentFormat)
+            ++ indx;
+        if (indx == text.length())
+            break;
+        const QChar c = text.at (indx);
+        if (c == '\'')
+        {
+            if (comment)
+            {
+                setFormat (indx, 1, commentFormat);
+                ++ indx;
+            }
+            else
+            {
+                if (doubleQuoted)
+                {
+                    setFormat (indx, 1, quoteFormat);
+                    ++ indx;
+                }
+                else if (isEscapedQuote (text, indx, true))
+                    ++ indx;
+                else
+                {
+                    int end = text.indexOf (singleQuoteMark, indx + 1);
+                    while (isEscapedQuote (text, end, false))
+                        end = text.indexOf (singleQuoteMark, end + 1);
+                    if (end == -1)
+                    {
+                        setFormat (indx, text.length() - indx, altQuoteFormat);
+                        if (!isHereDocStart)
+                            setCurrentBlockState (SH_SingleQuoteState);
+                        indx = text.length();
+                    }
+                    else
+                    {
+                        setFormat (indx, end + 1 - indx, altQuoteFormat);
+                        indx = end + 1;
+                    }
+                }
+            }
+        }
+        else if (c == '\"')
+        {
+            if (comment)
+                setFormat (indx, 1, commentFormat);
+            else if (!isEscapedQuote (text, indx, true))
+            {
+                doubleQuoted = !doubleQuoted;
+                setFormat (indx, 1, quoteFormat);
+            }
+            ++ indx;
+        }
+        else if (c == '$') // may start a new code block
+        {
+            if (comment)
+            {
+                setFormat (indx, 1, commentFormat);
+                ++ indx;
+            }
+            else
+            {
+                if (text.mid (indx, 2) == "$(")
+                {
+                    setFormat (indx, 2, neutralFormat);
+
+                    int Nests = nests + 1;
+                    indx = formatInsideCommand (text,
+                                                nests, Nests, quotes,
+                                                isHereDocStart, indx + 2);
+                    nests = Nests;
+                }
+                else
+                {
+                    if (doubleQuoted)
+                        setFormat (indx, 1, quoteFormat);
+                    else
+                        setFormat (indx, 1, neutralFormat);
+                    ++ indx;
+                }
+            }
+        }
+        else if (c == '(')
+        {
+            if (doubleQuoted)
+                setFormat (indx, 1, quoteFormat);
+            else
+            {
+                if (comment)
+                    setFormat (indx, 1, commentFormat);
+                else
+                    setFormat (indx, 1, neutralFormat);
+                if (!isEscapedChar (text, indx))
+                    ++ p;
+            }
+            ++ indx;
+        }
+        else if (c == ')') // may end a code block
+        {
+            if (doubleQuoted)
+                setFormat (indx, 1, quoteFormat);
+            else
+            {
+                if (!isEscapedChar (text, indx))
+                {
+                    -- p;
+                    if (p < 0)
+                    {
+                        setFormat (indx, 1, neutralFormat); // never commented
+                        quotes.remove (initialOpenNests);
+                        -- nests;
+                        initialOpenNests = nests;
+                        doubleQuoted = quotes.contains (nests);
+                        p = 0;
+                    }
+                    else if (comment)
+                        setFormat (indx, 1, commentFormat);
+                    else
+                        setFormat (indx, 1, neutralFormat);
+                }
+                else if (comment)
+                    setFormat (indx, 1, commentFormat);
+                else
+                    setFormat (indx, 1, neutralFormat);
+            }
+            ++ indx;
+        }
+        else if (c == '#') // may be comment sign
+        {
+            if (comment)
+                setFormat (indx, 1, commentFormat);
+            else if (doubleQuoted)
+                setFormat (indx, 1, quoteFormat);
+            else
+            {
+                if (indx == 0)
+                {
+                    comment = true;
+                    setFormat (indx, 1, commentFormat);
+                }
+                else
+                {
+                    if (text.at (indx - 1) == QChar (QChar::Space))
+                    {
+                        comment = true;
+                        setFormat (indx, 1, commentFormat);
+                    }
+                    else
+                        setFormat (indx, 1, neutralFormat);
+                }
+            }
+            ++ indx;
+        }
+        else // any non-special character
+        {
+            if (comment)
+                setFormat (indx, 1, commentFormat);
+            else if (doubleQuoted)
+                setFormat (indx, 1, quoteFormat);
+            else
+                setFormat (indx, 1, neutralFormat);
+            ++ indx;
+        }
+    }
+
+    if (nests < minOpenNests) nests = minOpenNests; // impossible
+    /* save the states */
+    if (doubleQuoted)
+    {
+        if (!isHereDocStart
+            /* an open subcommand may have already set the state */
+            && currentBlockState() != SH_SingleQuoteState)
+        { // FIXME: This state is redundant. remove it later!
+            setCurrentBlockState (SH_DoubleQuoteState);
+        }
+        quotes.insert (initialOpenNests);
+    }
+    else
+        quotes.remove (initialOpenNests);
+    return indx;
+}
+/*************************/
+// This function highlights command substitution variables $(...).
+bool Highlighter::SH_CmndSubstVar (const QString &text,
+                                   TextBlockData *currentBlockData,
+                                   int oldOpenNests, const QSet<int> &oldOpenQuotes)
+{
+    if (progLan != "sh" || !currentBlockData) return false;
+
+    int prevState = previousBlockState();
+    int curState = currentBlockState();
+    bool isHereDocStart = (curState < -1 || curState >= endState);
+
+    int N = 0;
+    QSet<int> Q;
+    QTextBlock prevBlock = currentBlock().previous();
+    /* get the data about open nests and their (double) quotes */
+    if (prevBlock.isValid())
+    {
+       if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+       {
+            N = prevData->openNests();
+            Q = prevData->openQuotes();
+       }
+    }
+
+    int indx = 0; int end = 0;
+
+    if (N > 0 && (prevState == SH_SingleQuoteState
+                  || prevState == SH_DoubleQuoteState
+                  || prevState == SH_MixedDoubleQuoteState
+                  || prevState == SH_MixedSingleQuoteState))
+    { // there was an unclosed quote in the previous block
+        if (prevState == SH_SingleQuoteState
+            || prevState == SH_MixedSingleQuoteState)
+        {
+            end = text.indexOf (singleQuoteMark);
+            while (isEscapedQuote (text, end, false))
+                end = text.indexOf (singleQuoteMark, end + 1);
+            if (end == -1)
+            {
+                setFormat (0, text.length(), altQuoteFormat);
+                if (!isHereDocStart)
+                    setCurrentBlockState (SH_SingleQuoteState);
+                goto FINISH;
+            }
+            else
+            {
+                setFormat (0, end + 1, altQuoteFormat);
+                indx = end + 1;
+            }
+        }
+        // else there's an open double quote, about which we know
+    }
+    else if (N == 0
+             || prevState < SH_DoubleQuoteState
+             || prevState > SH_MixedSingleQuoteState)
+    {
+        if (N > 0) // there was an unclosed code block
+            indx = 0;
+        // else search for "$(" below
+    }
+
+    while (indx < text.length())
+    {
+        if (N == 0)
+        { // search for the first code block (after the previous one is closed)
+            static const QRegularExpression codeBlockStart ("\\$\\(");
+            int start = text.indexOf (codeBlockStart, indx);
+            if (start == -1 || format (start) == commentFormat)
+                goto FINISH;
+            else
+            { // a new code block
+                ++ N;
+                indx = start + 2;
+                setFormat (start, 2, neutralFormat);
+            }
+        }
+        indx = formatInsideCommand (text,
+                                    0, N, Q,
+                                    isHereDocStart, indx);
+    }
+
+FINISH:
+    if (!Q.isEmpty())
+        currentBlockData->insertOpenQuotes (Q);
+    if (N > 0)
+    {
+        currentBlockData->insertNestInfo (N);
+        if (isHereDocStart)
+        {
+            /* change the state to reflect the number of open code blocks
+               (the open quotes info is considered at highlightBlock())*/
+            curState > 0 ? curState += 2*(N + 3) : curState -= 2*(N + 3); // see isHereDocument()
+            setCurrentBlockState (curState);
+        }
+    }
+    if (N != oldOpenNests || Q != oldOpenQuotes)
+    { // forced highlighting of the next block is necessary
+        return true;
+    }
+    else return false;
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter/highlighter-yaml.cpp featherpad-1.0.1/featherpad/highlighter/highlighter-yaml.cpp
--- featherpad-0.17.1/featherpad/highlighter/highlighter-yaml.cpp	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter/highlighter-yaml.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,573 @@
+/*
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2021 <tsujan2000 at gmail.com>
+ *
+ * FeatherPad is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * FeatherPad is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
+ */
+
+#include "highlighter.h"
+
+namespace FeatherPad {
+
+// Check whether the start bracket/brace is escaped. FIXME: This only covers keys and values.
+static inline bool isYamlBraceEscaped (const QString &text, const QRegularExpression &start, int pos)
+{
+    if (pos < 0 || text.indexOf (start, pos) != pos)
+        return false;
+    int indx = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)?[^:#]*:\\s+\\K"), pos); // the last key
+    if (indx > -1)
+    {
+        QString txt = text.right (text.size() - indx);
+        if (txt.indexOf (QRegularExpression ("^[^{\\[#\\s]")) > -1) // inside value
+            return true;
+    }
+    QRegularExpressionMatch match;
+    indx = text.lastIndexOf (QRegularExpression ("[^:#\\s{\\[]+\\s*" + start.pattern() + "[^:#]*:\\s+"), pos, &match);
+    if (indx > -1 && indx < pos && indx + match.capturedLength() > pos) // inside key
+        return true;
+    return false;
+}
+
+// Process open braces or brackets, apply the neutral format appropriately
+// and return a boolean that shows whether the next line should be updated.
+// Single-line comments should have already been highlighted.
+bool Highlighter::yamlOpenBraces (const QString &text,
+                                  const QRegularExpression &startExp, const QRegularExpression &endExp,
+                                  int oldOpenNests, bool oldProperty, // old info on the current line
+                                  bool setData) // whether data should be set
+{
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    if (!data) return false;
+
+    int openNests = 0;
+    bool property = startExp.pattern() == "{" ? false : true;
+
+    if (setData)
+    {
+        QTextBlock prevBlock = currentBlock().previous();
+        if (prevBlock.isValid())
+        {
+            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+            {
+                if (prevData->getProperty() == property)
+                    openNests = prevData->openNests();
+            }
+        }
+    }
+
+    QRegularExpression mixed (startExp.pattern() + "|" + endExp.pattern());
+    int indx = -1, startIndx = 0;
+    int txtL = text.length();
+    QRegularExpressionMatch match;
+    while (indx < txtL)
+    {
+        indx = text.indexOf (mixed, indx + 1, &match);
+        while (isYamlBraceEscaped (text, startExp, indx) || isQuoted (text, indx))
+            indx = text.indexOf (mixed, indx + match.capturedLength(), &match);
+        if (format (indx) == commentFormat)
+        {
+            while (format (indx - 1) == commentFormat) --indx;
+            if (indx > startIndx && openNests > 0)
+                setFormat (startIndx, indx - startIndx, neutralFormat);
+            break;
+        }
+        if (indx > -1)
+        {
+            if (text.indexOf (startExp, indx) == indx)
+            {
+                if (openNests == 0)
+                    startIndx = indx;
+                ++ openNests;
+            }
+            else
+            {
+                -- openNests;
+                if (openNests == 0)
+                    setFormat (startIndx, indx + match.capturedLength() - startIndx, neutralFormat);
+                openNests = qMax (openNests, 0);
+            }
+        }
+        else
+        {
+            if (openNests > 0)
+            {
+                indx = txtL;
+                while (format (indx - 1) == commentFormat) --indx;
+                if (indx > startIndx)
+                    setFormat (startIndx, indx - startIndx, neutralFormat);
+            }
+            break;
+        }
+    }
+
+    if (setData)
+    {
+        data->insertNestInfo (openNests);
+        if (openNests == 0) // braces take priority over brackets
+            property = false;
+        data->setProperty (property);
+        return (openNests != oldOpenNests || property != oldProperty);
+    }
+    return false; // don't update the next line if no data is set
+}
+/*************************/
+void Highlighter::yamlLiteralBlock (const QString &text)
+{
+    /* each line of a literal block contains the info on the block's indentation
+       as a whitespace string prefixed by "i" */
+    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
+    if (data == nullptr) return; // impossible
+    QString blockIndent;
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+        {
+            blockIndent = prevData->labelInfo();
+            if (!blockIndent.startsWith ("i"))
+                blockIndent = QString();
+        }
+    }
+
+    QRegularExpressionMatch match;
+    if (previousBlockState() == codeBlockState) // the literal block may continue
+    {
+        text.indexOf (QRegularExpression ("^\\s*"), 0, &match);
+        QString startingSpaces = "i" + match.captured();
+        if (text == match.captured() // only whitespaces...
+            /* ... or the indentation is wider than that of the literal block */
+            || (startingSpaces != blockIndent
+                && (blockIndent.isEmpty() || startingSpaces.startsWith (blockIndent))))
+        {
+            setFormat (0, text.length(), codeBlockFormat);
+            setCurrentBlockState (codeBlockState);
+            data->insertInfo (blockIndent);
+            return;
+        }
+    }
+
+    /* the start of a literal block (which is formatted near the end of the main formatting
+       because, if it was formatted here, its format might be overridden by that of a value) */
+    static const QRegularExpression yamlBlockStartExp ("^(?!#)(?:(?!\\s#).)*\\s+\\K(\\||>)-?\\s*(?=\\s#|$)");
+    int index = text.indexOf (yamlBlockStartExp, 0);
+    if (index >= 0)
+    {
+        setCurrentBlockState (codeBlockState);
+        text.indexOf (QRegularExpression ("^\\s*"), 0, &match);
+        data->insertInfo ("i" + match.captured());
+    }
+}
+/*************************/
+void Highlighter::highlightYamlBlock (const QString &text)
+{
+    bool rehighlightNextBlock = false;
+    int oldOpenNests = 0;
+    bool oldProperty = false;
+    QString oldLabel;
+    if (TextBlockData *oldData = static_cast<TextBlockData *>(currentBlockUserData()))
+    {
+        oldOpenNests = oldData->openNests();
+        oldProperty = oldData->getProperty();
+        oldLabel = oldData->labelInfo();
+    }
+
+    int index;
+    TextBlockData *data = new TextBlockData;
+    data->setLastState (currentBlockState());
+    setCurrentBlockUserData (data);
+    setCurrentBlockState (0);
+
+    singleLineComment (text, 0);
+
+    bool isCodeBlock = previousBlockState() == codeBlockState;
+    bool braces (true);
+    int openNests = 0;
+    QTextBlock prevBlock = currentBlock().previous();
+    if (prevBlock.isValid())
+    {
+        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
+        {
+            openNests = prevData->openNests();
+            if (openNests != 0) // braces take priority over brackets
+                braces = !prevData->getProperty();
+
+            if (isCodeBlock)
+            {
+                QString spaces = prevData->labelInfo();
+                if (!spaces.startsWith ("i"))
+                    spaces = QString();
+                else
+                    spaces.remove (0, 1);
+                isCodeBlock = text.startsWith (spaces + " ");
+            }
+        }
+    }
+    if (text.indexOf (QRegularExpression("^---")) == 0) // pass the data
+    {
+        data->insertNestInfo (openNests);
+        data->setProperty (braces);
+        rehighlightNextBlock |= oldOpenNests != openNests;
+    }
+    else // format braces and brackets before formatting multi-line quotes
+    {
+        if (!isCodeBlock)
+        {
+            if (braces)
+            {
+                rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("{"), QRegularExpression ("}"), oldOpenNests, oldProperty, true);
+                rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("\\["), QRegularExpression ("\\]"), oldOpenNests, oldProperty,
+                                                        data->openNests() == 0); // set data only if braces are completely closed
+            }
+            else
+            {
+                rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("\\["), QRegularExpression ("\\]"), oldOpenNests, oldProperty, true);
+                rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("{"), QRegularExpression ("}"), oldOpenNests, oldProperty,
+                                                        data->openNests() == 0); // set data only if brackets are completely closed
+            }
+        }
+        else
+        {
+            data->insertNestInfo (0);
+            data->setProperty (false);
+        }
+        if (data->openNests() == 0)
+        {
+            yamlLiteralBlock (text);
+            QString newIndent = data->labelInfo();
+            rehighlightNextBlock |= currentBlockState() == data->lastState() && oldLabel != newIndent;
+        }
+
+        /* since nothing can be before a Yaml comment except for spaces,
+           it's safe to call multiLineQuote() here, after singleLineComment() */
+        rehighlightNextBlock |= multiLineQuote (text);
+    }
+
+    QTextCharFormat fi;
+
+    /* yaml main Formatting */
+    int bn = currentBlock().blockNumber();
+    if (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber())
+    {
+        data->setHighlighted();
+        for (const HighlightingRule &rule : qAsConst (highlightingRules))
+        {
+            if (rule.format != whiteSpaceFormat
+                && format (0) == codeBlockFormat) // a literal block
+            {
+                continue;
+            }
+            if (rule.format == commentFormat)
+                continue;
+
+            QRegularExpressionMatch match;
+            index = text.indexOf (rule.pattern, 0, &match);
+            if (rule.format != whiteSpaceFormat)
+            {
+                fi = format (index);
+                while (index >= 0
+                        && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                            || fi == commentFormat || fi == urlFormat
+                            || fi == noteFormat)) // because of Yaml keys (as in "# TODO:...")
+                {
+                    index = text.indexOf (rule.pattern, index + 1, &match);
+                    fi = format (index);
+                }
+            }
+            while (index >= 0)
+            {
+                int length = match.capturedLength();
+
+                /* check if there is a valid brace inside the regex
+                   and if there is, limit the found match to it */
+                QString txt = text.mid (index, length);
+                int braceIndx = 0;
+                while ((braceIndx = txt.indexOf (QRegularExpression ("{"), braceIndx)) >= 0)
+                {
+                    if (format (index + braceIndx) == neutralFormat
+                        && !isYamlBraceEscaped (text, QRegularExpression ("{"), index + braceIndx))
+                    {
+                        txt = text.mid (index, braceIndx);
+                        break;
+                    }
+                    ++ braceIndx;
+                }
+                braceIndx = 0;
+                while ((braceIndx = txt.indexOf (QRegularExpression ("}"), braceIndx)) >= 0)
+                {
+                    if (format (index + braceIndx) == neutralFormat)
+                    {
+                        txt = text.mid (index, braceIndx);
+                        break;
+                    }
+                    ++ braceIndx;
+                }
+                braceIndx = 0;
+                while ((braceIndx = txt.indexOf (QRegularExpression ("\\["), braceIndx)) >= 0)
+                {
+                    if (format (index + braceIndx) == neutralFormat
+                        && !isYamlBraceEscaped (text, QRegularExpression ("\\["), index + braceIndx))
+                    {
+                        txt = text.mid (index, braceIndx);
+                        break;
+                    }
+                    ++ braceIndx;
+                }
+                braceIndx = 0;
+                while ((braceIndx = txt.indexOf (QRegularExpression ("\\]"), braceIndx)) >= 0)
+                {
+                    if (format (index + braceIndx) == neutralFormat)
+                    {
+                        txt = text.mid (index, braceIndx);
+                        break;
+                    }
+                    ++ braceIndx;
+                }
+                braceIndx = 0;
+                while ((braceIndx = txt.indexOf (QRegularExpression (","), braceIndx)) >= 0)
+                {
+                    if (format (index + braceIndx) == neutralFormat)
+                    {
+                        txt = text.mid (index, braceIndx);
+                        break;
+                    }
+                    ++ braceIndx;
+                }
+                length = txt.length();
+
+                if (length > 0)
+                {
+                    fi = rule.format;
+                    if (fi.foreground() == Violet)
+                    {
+                        if (txt.indexOf (QRegularExpression ("([-+]?(\\d*\\.?\\d+|\\d+\\.)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)\\s*(?=(#|$))"), 0, &match) == 0)
+                        { // format numerical values differently
+                            if (match.capturedLength() == length)
+                                fi.setForeground (Brown);
+                        }
+                        else if (txt.indexOf (QRegularExpression ("(true|false|yes|no|TRUE|FALSE|YES|NO|True|False|Yes|No)\\s*(?=(#|$))"), 0, &match) == 0)
+                        { // format booleans differently
+                            if (match.capturedLength() == length)
+                            {
+                                fi.setForeground (DarkBlue);
+                                fi.setFontWeight (QFont::Bold);
+                            }
+                        }
+                    }
+                    setFormat (index, length, fi);
+                }
+                index = text.indexOf (rule.pattern, index + qMax (length, 1), &match);
+
+                if (rule.format != whiteSpaceFormat)
+                {
+                    fi = format (index);
+                    while (index >= 0
+                            && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                                || fi == commentFormat || fi == urlFormat || fi == noteFormat))
+                    {
+                        index = text.indexOf (rule.pattern, index + 1, &match);
+                        fi = format (index);
+                    }
+                }
+            }
+        }
+    }
+
+    /* left parenthesis */
+    index = text.indexOf ('(');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat))
+    {
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = '(';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('(', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat))
+        {
+            index = text.indexOf ('(', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right parenthesis */
+    index = text.indexOf (')');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat))
+    {
+        index = text.indexOf (')', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        ParenthesisInfo *info = new ParenthesisInfo;
+        info->character = ')';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (')', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat))
+        {
+            index = text.indexOf (')', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left brace */
+    index = text.indexOf ('{');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi != neutralFormat))
+    {
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '{';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('{', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi != neutralFormat))
+        {
+            index = text.indexOf ('{', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right brace */
+    index = text.indexOf ('}');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi != neutralFormat))
+    {
+        index = text.indexOf ('}', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BraceInfo *info = new BraceInfo;
+        info->character = '}';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('}', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi != neutralFormat))
+        {
+            index = text.indexOf ('}', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* left bracket */
+    index = text.indexOf ('[');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi != neutralFormat))
+    {
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = '[';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf ('[', index + 1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi != neutralFormat))
+        {
+            index = text.indexOf ('[', index + 1);
+            fi = format (index);
+        }
+    }
+
+    /* right bracket */
+    index = text.indexOf (']');
+    fi = format (index);
+    while (index >= 0
+           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+               || fi == commentFormat || fi == urlFormat
+               || fi != neutralFormat))
+    {
+        index = text.indexOf (']', index + 1);
+        fi = format (index);
+    }
+    while (index >= 0)
+    {
+        BracketInfo *info = new BracketInfo;
+        info->character = ']';
+        info->position = index;
+        data->insertInfo (info);
+
+        index = text.indexOf (']', index +1);
+        fi = format (index);
+        while (index >= 0
+               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
+                   || fi == commentFormat || fi == urlFormat
+                   || fi != neutralFormat))
+        {
+            index = text.indexOf (']', index + 1);
+            fi = format (index);
+        }
+    }
+
+    setCurrentBlockUserData (data);
+
+    if (rehighlightNextBlock)
+    {
+        QTextBlock nextBlock = currentBlock().next();
+        if (nextBlock.isValid())
+            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
+    }
+}
+
+}
diff -Nru featherpad-0.17.1/featherpad/highlighter.cpp featherpad-1.0.1/featherpad/highlighter.cpp
--- featherpad-0.17.1/featherpad/highlighter.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,5613 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-#include <QTextDocument>
-
-Q_DECLARE_METATYPE(QTextBlock)
-
-namespace FeatherPad {
-
-/* NOTE: It is supposed that a URL does not end with a punctuation mark, parenthesis, bracket or single-quotation mark. */
-const QRegularExpression Highlighter::urlPattern ("[A-Za-z0-9_\\-]+://((?!"|>|<)[A-Za-z0-9_.+/\\?\\=~&%#,;!@\\*\'\\-:\\(\\)\\[\\]])+(?<!\\.|\\?|!|:|;|,|\\(|\\)|\\[|\\]|\')|[A-Za-z0-9_.\\-]+@[A-Za-z0-9_\\-]+\\.[A-Za-z0-9.]+(?<!\\.)");
-const QRegularExpression Highlighter::notePattern ("\\b(NOTE|TODO|FIXME|WARNING)\\b");
-
-TextBlockData::~TextBlockData()
-{
-    while (!allParentheses.isEmpty())
-    {
-        ParenthesisInfo *info = allParentheses.at (0);
-        allParentheses.remove (0);
-        delete info;
-    }
-    while (!allBraces.isEmpty())
-    {
-        BraceInfo *info = allBraces.at (0);
-        allBraces.remove(0);
-        delete info;
-    }
-    while (!allBrackets.isEmpty())
-    {
-        BracketInfo *info = allBrackets.at (0);
-        allBrackets.remove(0);
-        delete info;
-    }
-}
-/*************************/
-QVector<ParenthesisInfo *> TextBlockData::parentheses() const
-{
-    return allParentheses;
-}
-/*************************/
-QVector<BraceInfo *> TextBlockData::braces() const
-{
-    return allBraces;
-}
-/*************************/
-QVector<BracketInfo *> TextBlockData::brackets() const
-{
-    return allBrackets;
-}
-/*************************/
-QString TextBlockData::labelInfo() const
-{
-    return label;
-}
-/*************************/
-bool TextBlockData::isHighlighted() const
-{
-    return Highlighted;
-}
-/*************************/
-bool TextBlockData::getProperty() const
-{
-    return Property;
-}
-/*************************/
-int TextBlockData::lastState() const
-{
-    return LastState;
-}
-/*************************/
-int TextBlockData::openNests() const
-{
-    return OpenNests;
-}
-/*************************/
-int TextBlockData::lastFormattedQuote() const
-{
-    return LastFormattedQuote;
-}
-/*************************/
-int TextBlockData::lastFormattedRegex() const
-{
-    return LastFormattedRegex;
-}
-/*************************/
-QSet<int> TextBlockData::openQuotes() const
-{
-    return OpenQuotes;
-}
-/*************************/
-void TextBlockData::insertInfo (ParenthesisInfo *info)
-{
-    int i = 0;
-    while (i < allParentheses.size()
-           && info->position > allParentheses.at (i)->position)
-    {
-        ++i;
-    }
-
-    allParentheses.insert (i, info);
-}
-/*************************/
-void TextBlockData::insertInfo (BraceInfo *info)
-{
-    int i = 0;
-    while (i < allBraces.size()
-           && info->position > allBraces.at (i)->position)
-    {
-        ++i;
-    }
-
-    allBraces.insert (i, info);
-}
-/*************************/
-void TextBlockData::insertInfo (BracketInfo *info)
-{
-    int i = 0;
-    while (i < allBrackets.size()
-           && info->position > allBrackets.at (i)->position)
-    {
-        ++i;
-    }
-
-    allBrackets.insert (i, info);
-}
-/*************************/
-void TextBlockData::insertInfo (const QString &str)
-{
-    label = str;
-}
-/*************************/
-void TextBlockData::setHighlighted()
-{
-    Highlighted = true;
-}
-/*************************/
-void TextBlockData::setProperty (bool p)
-{
-    Property = p;
-}
-/*************************/
-void TextBlockData::setLastState (int state)
-{
-    LastState = state;
-}
-/*************************/
-void TextBlockData::insertNestInfo (int nests)
-{
-    OpenNests = nests;
-}
-/*************************/
-void TextBlockData::insertLastFormattedQuote (int last)
-{
-    LastFormattedQuote = last;
-}
-/*************************/
-void TextBlockData::insertLastFormattedRegex (int last)
-{
-    LastFormattedRegex = last;
-}
-/*************************/
-void TextBlockData::insertOpenQuotes (const QSet<int> &openQuotes)
-{
-    OpenQuotes.unite (openQuotes);
-}
-/*************************/
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-// To work around a nasty bug in Qt 5.14.0
-static QColor overlayColor (const QColor& bgCol, const QColor& overlayCol)
-{
-    if (!overlayCol.isValid()) return QColor(0,0,0);
-    if (!bgCol.isValid()) return overlayCol;
-
-    qreal a1 = overlayCol.alphaF();
-    if (a1 == 1.0) return overlayCol;
-    qreal a0  = bgCol.alphaF();
-    qreal a = (1.0 - a1) * a0 + a1;
-
-    QColor res;
-    res.setAlphaF(a);
-    res.setRedF (((1.0 - a1) * a0 * bgCol.redF() + a1 * overlayCol.redF()) / a);
-    res.setGreenF (((1.0 - a1) * a0 *bgCol.greenF() + a1 * overlayCol.greenF()) / a);
-    res.setBlueF (((1.0 - a1) * a0 * bgCol.blueF() + a1 * overlayCol.blueF()) / a);
-
-    return res;
-}
-#endif
-
-// Here, the order of formatting is important because of overrides.
-Highlighter::Highlighter (QTextDocument *parent, const QString& lang,
-                          const QTextCursor &start, const QTextCursor &end,
-                          bool darkColorScheme,
-                          bool showWhiteSpace,
-                          bool showEndings,
-                          int whitespaceValue,
-                          const QHash<QString, QColor> &syntaxColors) : QSyntaxHighlighter (parent)
-{
-    if (lang.isEmpty()) return;
-
-    if (showWhiteSpace || showEndings)
-    {
-        QTextOption opt =  document()->defaultTextOption();
-        QTextOption::Flags flags = opt.flags();
-        if (showWhiteSpace)
-            flags |= QTextOption::ShowTabsAndSpaces;
-        if (showEndings)
-            flags |= QTextOption::ShowLineAndParagraphSeparators
-                     | QTextOption::AddSpaceForLineAndParagraphSeparators // never show the horizontal scrollbar on wrapping
-                     | QTextOption::ShowDocumentTerminator;
-        opt.setFlags (flags);
-        document()->setDefaultTextOption (opt);
-    }
-
-    /* for highlighting next block inside highlightBlock() when needed */
-    qRegisterMetaType<QTextBlock>();
-
-    startCursor = start;
-    endCursor = end;
-    progLan = lang;
-
-    quoteMark.setPattern ("\""); // the standard quote mark (always a single character)
-    mixedQuoteMark.setPattern ("\"|\'");
-    /* includes Perl's backquote operator and JavaScript's template literal */
-    mixedQuoteBackquote.setPattern ("\"|\'|`");
-
-    HighlightingRule rule;
-
-    QColor Faded (whitespaceValue, whitespaceValue, whitespaceValue);
-    QColor TextColor, neutralColor, translucent;
-    if (syntaxColors.size() == 11)
-    {
-        /* NOTE: All 11 + 1 colors should be valid, opaque and different from each other
-                 but we don't check them here because "FeatherPad::Config" gets them so. */
-        Blue = syntaxColors.value ("function");
-        Magenta = syntaxColors.value ("BuiltinFunction");
-        Red = syntaxColors.value ("comment");
-        DarkGreen = syntaxColors.value ("quote");
-        DarkMagenta = syntaxColors.value ("type");
-        DarkBlue = syntaxColors.value ("keyWord");
-        Brown = syntaxColors.value ("number");
-        DarkRed = syntaxColors.value ("regex");
-        Violet = syntaxColors.value ("xmlElement");
-        Verda = syntaxColors.value ("cssValue");
-        DarkYellow = syntaxColors.value ("other");
-
-        QList<QColor> colors;
-        colors << Blue << Magenta << Red << DarkGreen << DarkMagenta << DarkBlue << Brown << DarkRed << Violet << Verda << DarkYellow << Faded;
-
-        /* extra colors */
-        if (!darkColorScheme)
-        {
-            TextColor =  QColor (Qt::black);
-            neutralColor = QColor (1, 1, 1);
-            translucent = QColor (0, 0, 0, 190); // for huge lines
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-            translucent = overlayColor (QColor (245, 245, 245), translucent);
-#endif
-        }
-        else
-        {
-            TextColor =  QColor (Qt::white);
-            neutralColor = QColor (254, 254, 254);
-            translucent = QColor (255, 255, 255, 190);
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-            translucent = overlayColor (QColor (10, 10, 10), translucent);
-#endif
-        }
-
-        int i = 0;
-        while (colors.contains (TextColor))
-        {
-            ++i;
-            if (!darkColorScheme)
-                TextColor = QColor (i, i, i);
-            else
-                TextColor = QColor (255 - i, 255 - i, 255 - i);
-        }
-        colors << TextColor;
-
-        while (colors.contains (neutralColor))
-        {
-            ++i;
-            if (!darkColorScheme)
-                neutralColor = QColor (i, i, i);
-            else
-                neutralColor = QColor (255 - i, 255 - i, 255 - i);
-        }
-        colors << neutralColor;
-
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-        i = 0;
-        int tr = translucent.red();
-        while (colors.contains (translucent))
-        {
-            ++i;
-            if (!darkColorScheme)
-                translucent = QColor (tr + i, tr + i, tr + i);
-            else
-                translucent = QColor (tr - i, tr - i, tr - i);
-        }
-        colors << translucent;
-#endif
-
-        DarkGreenAlt = DarkGreen.lighter (101);
-        if (DarkGreenAlt == DarkGreen)
-        {
-            DarkGreenAlt = QColor (DarkGreen.red() > 127 ? DarkGreen.red() - 1 : DarkGreen.red() + 1,
-                                   DarkGreen.green() > 127 ? DarkGreen.green() - 1 : DarkGreen.green() + 1,
-                                   DarkGreen.blue() > 127 ? DarkGreen.blue() - 1 : DarkGreen.blue() + 1);
-        }
-        while (colors.contains (DarkGreenAlt))
-        {
-            DarkGreenAlt = QColor (DarkGreen.red() > 127 ? DarkGreenAlt.red() - 1 : DarkGreenAlt.red() + 1,
-                                   DarkGreen.green() > 127 ? DarkGreenAlt.green() - 1 : DarkGreenAlt.green() + 1,
-                                   DarkGreen.blue() > 127 ? DarkGreenAlt.blue() - 1 : DarkGreenAlt.blue() + 1);
-        }
-    }
-    else // built-in colors (this block is never reached but is kept for the sake of consistency)
-    {
-        if (!darkColorScheme)
-        {
-            TextColor =  QColor (Qt::black);
-            neutralColor = QColor (1, 1, 1);
-            Blue = QColor (Qt::blue);
-            DarkBlue = QColor (Qt::darkBlue);
-            Red = QColor (Qt::red);
-            DarkRed = QColor (150, 0, 0);
-            Verda = QColor (0, 110, 110);
-            DarkGreen = QColor (Qt::darkGreen);
-            DarkMagenta = QColor (Qt::darkMagenta);
-            Violet = QColor (126, 0, 230); // #7e00e6
-            Brown = QColor (160, 80, 0);
-            DarkYellow = QColor (100, 100, 0); // Qt::darkYellow is (180, 180, 0)
-            translucent = QColor (0, 0, 0, 190);
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-            translucent = overlayColor (QColor (245, 245, 245), translucent);
-#endif
-        }
-        else
-        {
-            TextColor =  QColor (Qt::white);
-            neutralColor = QColor (254, 254, 254);
-            Blue = QColor (85, 227, 255);
-            DarkBlue = QColor (65, 154, 255);
-            Red = QColor (255, 120, 120);
-            DarkRed = QColor (255, 160, 0);
-            Verda = QColor (150, 255, 0);
-            DarkGreen = QColor (Qt::green);
-            DarkMagenta = QColor (255, 153, 255);
-            Violet = QColor (255, 255, 0); // == DarkYellow == Qt::yellow
-            Brown = QColor (255, 200, 0);
-            DarkYellow = QColor (Qt::yellow);
-            translucent = QColor (255, 255, 255, 190);
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-            translucent = overlayColor (QColor (10, 10, 10), translucent);
-#endif
-        }
-        Magenta = QColor (Qt::magenta);
-        DarkGreenAlt = DarkGreen.lighter (101); // almost identical
-    }
-
-    mainFormat.setForeground (TextColor);
-    neutralFormat.setForeground (neutralColor);
-    whiteSpaceFormat.setForeground (Faded);
-    translucentFormat.setForeground (translucent);
-    translucentFormat.setFontItalic (true);
-
-    quoteFormat.setForeground (DarkGreen);
-    altQuoteFormat.setForeground (DarkGreen);
-    urlInsideQuoteFormat.setForeground (DarkGreen);
-    altQuoteFormat.setFontItalic (true);
-    urlInsideQuoteFormat.setFontItalic (true);
-    urlInsideQuoteFormat.setFontUnderline (true);
-    /*quoteStartExpression.setPattern ("\"([^\"'])");
-    quoteEndExpression.setPattern ("([^\"'])\"");*/
-    regexFormat.setForeground (DarkRed);
-
-    /*************************
-     * Functions and Numbers *
-     *************************/
-
-    /* there may be javascript inside html */
-    QString Lang = progLan == "html" ? "javascript" : progLan;
-
-    /* might be overridden by the keywords format */
-    if (progLan == "c" || progLan == "cpp"
-        || progLan == "lua" || progLan == "python"
-        || progLan == "php" || progLan == "dart")
-    {
-        QTextCharFormat ft;
-
-        /* numbers (including the scientific notation and hexadecimal numbers) */
-        ft.setForeground (Brown);
-        rule.pattern.setPattern ("(?<=^|[^\\w\\d\\.])((\\d*\\.?\\d+|\\d+\\.?\\d*)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)(?=[^\\w\\d\\.]|$)");
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        /* POSIX signals */
-        ft.setForeground (DarkYellow);
-        rule.pattern.setPattern ("\\b(SIGABRT|SIGIOT|SIGALRM|SIGVTALRM|SIGPROF|SIGBUS|SIGCHLD|SIGCONT|SIGFPE|SIGHUP|SIGILL|SIGINT|SIGKILL|SIGPIPE|SIGPOLL|SIGRTMIN|SIGRTMAX|SIGQUIT|SIGSEGV|SIGSTOP|SIGSYS|SIGTERM|SIGTSTP|SIGTTIN|SIGTTOU|SIGTRAP|SIGURG|SIGUSR1|SIGUSR2|SIGXCPU|SIGXFSZ|SIGWINCH)(?!(\\.|-|@|#|\\$))\\b");
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        ft.setFontItalic (true);
-        ft.setForeground (Blue);
-        /* before parentheses... */
-        rule.pattern.setPattern ("\\b[A-Za-z0-9_]+(?=\\s*\\()");
-        rule.format = ft;
-        highlightingRules.append (rule);
-        /* ... but make exception for what comes after "#define" */
-        if (progLan == "c" || progLan == "cpp")
-        {
-            rule.pattern.setPattern ("^\\s*#\\s*define\\s+[^\"\']" // may contain slash but no quote
-                                    "+(?=\\s*\\()");
-            rule.format = neutralFormat;
-            highlightingRules.append (rule);
-        }
-        else if (progLan == "python")
-        { // built-in functions
-            ft.setFontWeight (QFont::Bold);
-            ft.setForeground (Magenta);
-            rule.pattern.setPattern ("\\b(abs|add|all|append|any|as_integer_ratio|ascii|basestring|bin|bit_length|bool|bytearray|bytes|callable|c\\.conjugate|capitalize|center|chr|classmethod|clear|cmp|compile|complex|count|critical|debug|decode|delattr|dict|difference_update|dir|discard|divmod|encode|endswith|enumerate|error|eval|expandtabs|exception|exec|execfile|extend|file|filter|find|float|format|fromhex|fromkeys|frozenset|get|getattr|globals|hasattr|hash|has_key|help|hex|id|index|info|input|insert|int|intersection_update|isalnum|isalpha|isdecimal|isdigit|isinstance|islower|isnumeric|isspace|issubclass|istitle|items|iter|iteritems|iterkeys|itervalues|isupper|is_integer|join|keys|len|list|ljust|locals|log|long|lower|lstrip|map|max|memoryview|min|next|object|oct|open|ord|partition|pop|popitem|pow|print|property|range|raw_input|read|reduce|reload|remove|replace|repr|reverse|reversed|rfind|rindex|rjust|rpartition|round|rsplit|rstrip|run|seek|set|setattr|slice|sort|sorted|split|splitlines|staticmethod|startswith|str|strip|sum|super|symmetric_difference_update|swapcase|title|translate|tuple|type|unichr|unicode|update|upper|values|vars|viewitems|viewkeys|viewvalues|warning|write|xrange|zip|zfill|(__(abs|add|and|cmp|coerce|complex|contains|delattr|delete|delitem|delslice|div|divmod|enter|eq|exit|float|floordiv|ge|get|getattr|getattribute|getitem|getslice|gt|hex|iadd|iand|idiv|ifloordiv|ilshift|invert|imod|import|imul|init|instancecheck|index|int|ior|ipow|irshift|isub|iter|itruediv|ixor|le|len|long|lshift|lt|missing|mod|mul|neg|nonzero|oct|or|pos|pow|radd|rand|rdiv|rdivmod|reversed|rfloordiv|rlshift|rmod|rmul|ror|rpow|rshift|rsub|rrshift|rtruediv|rxor|set|setattr|setitem|setslice|sub|subclasses|subclasscheck|truediv|unicode|xor)__))(?=\\s*\\()");
-            rule.format = ft;
-            highlightingRules.append (rule);
-        }
-    }
-    else if (Lang == "javascript" || progLan == "qml")
-    {
-        QTextCharFormat ft;
-
-        /* before dot but not after it (might be overridden by keywords) */
-        ft.setForeground (Blue);
-        ft.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("(?<!\\.)\\s*[A-Za-z0-9_\\$]+\\s*(?=\\.)"); // "(?<![A-Za-z0-9_\\$])[A-Za-z0-9_\\$]+\\s*(?=\\.)"
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        /* before parentheses */
-        ft.setFontWeight (QFont::Normal);
-        ft.setFontItalic (true);
-        rule.pattern.setPattern ("(?<![A-Za-z0-9_\\$])[A-Za-z0-9_\\$]+(?=\\s*\\()");
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        ft.setFontItalic (false);
-        ft.setFontWeight (QFont::Bold);
-        ft.setForeground (Magenta);
-        rule.pattern.setPattern ("\\b(?<!(@|#|\\$))(export|from|import|as)(?!(@|#|\\$|(\\s*:)))\\b");
-        rule.format = ft;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "troff")
-    {
-        QTextCharFormat troffFormat;
-
-        troffFormat.setForeground (Blue);
-        rule.pattern.setPattern ("^\\.\\s*[a-zA-Z]+");
-        rule.format = troffFormat;
-        highlightingRules.append (rule);
-
-        troffFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("^\\.\\s*[a-zA-Z]+\\K.*");
-        rule.format = troffFormat;
-        highlightingRules.append (rule);
-
-        /* numbers */
-        troffFormat.setForeground (Brown);
-        rule.pattern.setPattern ("(?<=^|[^\\w\\d|@|#|\\$])((\\d*\\.?\\d+|\\d+\\.?\\d*)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)(?=[^\\d]|$)");
-        rule.format = troffFormat;
-        highlightingRules.append (rule);
-
-        /* meaningful escapes */
-        troffFormat.setForeground (DarkGreen);
-        rule.pattern.setPattern ("\\\\(e|'|`|-|\\s|0|\\||\\^|&|\\!|\\\\\\$\\d+|%|\\(\\w{2}|\\\\\\*\\w|\\*\\(\\w{2}|a|b(?='\\w)|c|d|D|f(\\w|\\(\\w{2})|(h|H)(?='\\d)|(j|k)\\w|l|L|n(\\w|\\(\\w{2})|o|p|r|s|S(?='\\d)|t|u|v(?='\\d)|w|x|zc|\\{|\\})");
-        rule.format = troffFormat;
-        highlightingRules.append (rule);
-
-        /* other escapes */
-        troffFormat.setForeground (Violet);
-        rule.pattern.setPattern ("\\\\([^e'`\\-\\s0\\|\\^&\\!\\\\%\\(\\*abcdDfhHjklLnoprsStuvwxz\\{\\}]|\\((?!\\w{2})|\\\\(?!\\$\\d)|\\*(?!\\(\\w{2})|b(?!'\\w)|(f|j|k|n)(?!\\w)|(f|n)(?!\\(\\w{2})|(h|H)(?!'\\d)|(S|v)(?!'\\d)|z(?!c))");
-        rule.format = troffFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "LaTeX")
-    {
-        codeBlockFormat.setForeground (DarkMagenta);
-
-        /* commands */
-        QTextCharFormat laTexFormat;
-        laTexFormat.setForeground (Blue);
-        rule.pattern.setPattern ("\\\\([a-zA-Z]+|[^a-zA-Z\\(\\)\\[\\]])");
-        rule.format = laTexFormat;
-        highlightingRules.append (rule);
-    }
-
-    /**********************
-     * Keywords and Types *
-     **********************/
-
-    /* keywords */
-    QTextCharFormat keywordFormat;
-    /* bash extra keywords */
-    if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
-    {
-        if (progLan == "cmake")
-        {
-            keywordFormat.setForeground (Brown);
-            rule.pattern.setPattern ("\\$\\{\\s*[A-Za-z0-9_.+/\\?#\\-:]*\\s*\\}");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-
-            /*
-               previously, the first six patterns were started with:
-               ((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)
-               instead of: (?<=^|\\(|\\s)
-            */
-            keywordFormat.setForeground (DarkBlue);
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_ARGC|CMAKE_ARGV0|CMAKE_ARGS|CMAKE_AR|CMAKE_BINARY_DIR|CMAKE_BUILD_TOOL|CMAKE_CACHE_ARGS|CMAKE_CACHE_DEFAULT_ARGS|CMAKE_CACHEFILE_DIR|CMAKE_CACHE_MAJOR_VERSION|CMAKE_CACHE_MINOR_VERSION|CMAKE_CACHE_PATCH_VERSION|CMAKE_CFG_INTDIR|CMAKE_COMMAND|CMAKE_CROSSCOMPILING|CMAKE_CTEST_COMMAND|CMAKE_CURRENT_BINARY_DIR|CMAKE_CURRENT_LIST_DIR|CMAKE_CURRENT_LIST_FILE|CMAKE_CURRENT_LIST_LINE|CMAKE_CURRENT_SOURCE_DIR|CMAKE_DL_LIBS|CMAKE_EDIT_COMMAND|CMAKE_EXECUTABLE_SUFFIX|CMAKE_EXTRA_GENERATOR|CMAKE_EXTRA_SHARED_LIBRARY_SUFFIXES|CMAKE_GENERATOR|CMAKE_GENERATOR_INSTANCE|CMAKE_GENERATOR_PLATFORM|CMAKE_GENERATOR_TOOLSET|CMAKE_HOME_DIRECTORY|CMAKE_IMPORT_LIBRARY_PREFIX|CMAKE_IMPORT_LIBRARY_SUFFIX|CMAKE_JOB_POOL_COMPILE|CMAKE_JOB_POOL_LINK|CMAKE_LINK_LIBRARY_SUFFIX|CMAKE_MAJOR_VERSION|CMAKE_MAKE_PROGRAM|CMAKE_MINIMUM_REQUIRED_VERSION|CMAKE_MINOR_VERSION|CMAKE_PARENT_LIST_FILE|CMAKE_PATCH_VERSION|CMAKE_PROJECT_NAME|CMAKE_RANLIB|CMAKE_ROOT|CMAKE_SCRIPT_MODE_FILE|CMAKE_SHARED_LIBRARY_PREFIX|CMAKE_SHARED_LIBRARY_SUFFIX|CMAKE_SHARED_MODULE_PREFIX|CMAKE_SHARED_MODULE_SUFFIX|CMAKE_SIZEOF_VOID_P|CMAKE_SKIP_INSTALL_RULES|CMAKE_SKIP_RPATH|CMAKE_SOURCE_DIR|CMAKE_STANDARD_LIBRARIES|CMAKE_STATIC_LIBRARY_PREFIX|CMAKE_STATIC_LIBRARY_SUFFIX|CMAKE_TOOLCHAIN_FILE|CMAKE_TWEAK_VERSION|CMAKE_VERBOSE_MAKEFILE|CMAKE_VERSION|CMAKE_VS_DEVENV_COMMAND|CMAKE_VS_INTEL_Fortran_PROJECT_VERSION|CMAKE_VS_MSBUILD_COMMAND|CMAKE_VS_MSDEV_COMMAND|CMAKE_VS_PLATFORM_TOOLSETCMAKE_XCODE_PLATFORM_TOOLSET|PROJECT_BINARY_DIR|PROJECT_NAME|PROJECT_SOURCE_DIR|PROJECT_VERSION|PROJECT_VERSION_MAJOR|PROJECT_VERSION_MINOR|PROJECT_VERSION_PATCH|PROJECT_VERSION_TWEAK|BUILD_SHARED_LIBS|CMAKE_ABSOLUTE_DESTINATION_FILES|CMAKE_APPBUNDLE_PATH|CMAKE_AUTOMOC_RELAXED_MODE|CMAKE_BACKWARDS_COMPATIBILITY|CMAKE_BUILD_TYPE|CMAKE_COLOR_MAKEFILE|CMAKE_CONFIGURATION_TYPES|CMAKE_DEBUG_TARGET_PROPERTIES|CMAKE_ERROR_DEPRECATED|CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION|CMAKE_SYSROOT|CMAKE_FIND_LIBRARY_PREFIXES|CMAKE_FIND_LIBRARY_SUFFIXES|CMAKE_FIND_NO_INSTALL_PREFIX|CMAKE_FIND_PACKAGE_WARN_NO_MODULE|CMAKE_FIND_ROOT_PATH|CMAKE_FIND_ROOT_PATH_MODE_INCLUDE|CMAKE_FIND_ROOT_PATH_MODE_LIBRARY|CMAKE_FIND_ROOT_PATH_MODE_PACKAGE|CMAKE_FIND_ROOT_PATH_MODE_PROGRAM|CMAKE_FRAMEWORK_PATH|CMAKE_IGNORE_PATH|CMAKE_INCLUDE_PATH|CMAKE_INCLUDE_DIRECTORIES_BEFORE|CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE|CMAKE_INSTALL_DEFAULT_COMPONENT_NAME|CMAKE_INSTALL_PREFIX|CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT|CMAKE_LIBRARY_PATH|CMAKE_MFC_FLAG|CMAKE_MODULE_PATH|CMAKE_NOT_USING_CONFIG_FLAGS|CMAKE_PREFIX_PATH|CMAKE_PROGRAM_PATH|CMAKE_SKIP_INSTALL_ALL_DEPENDENCY|CMAKE_STAGING_PREFIX|CMAKE_SYSTEM_IGNORE_PATH|CMAKE_SYSTEM_INCLUDE_PATH|CMAKE_SYSTEM_LIBRARY_PATH|CMAKE_SYSTEM_PREFIX_PATH|CMAKE_SYSTEM_PROGRAM_PATH|CMAKE_USER_MAKE_RULES_OVERRIDE|CMAKE_WARN_DEPRECATED|CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION|BORLAND|CMAKE_CL_64|CMAKE_COMPILER_2005|CMAKE_HOST_APPLE|CMAKE_HOST_SYSTEM_NAME|CMAKE_HOST_SYSTEM_PROCESSOR|CMAKE_HOST_SYSTEM|CMAKE_HOST_SYSTEM_VERSION|CMAKE_HOST_UNIX|CMAKE_HOST_WIN32|CMAKE_LIBRARY_ARCHITECTURE_REGEX|CMAKE_LIBRARY_ARCHITECTURE|CMAKE_OBJECT_PATH_MAX|CMAKE_SYSTEM_NAME|CMAKE_SYSTEM_PROCESSOR|CMAKE_SYSTEM|CMAKE_SYSTEM_VERSION|ENV|MSVC10|MSVC11|MSVC12|MSVC60|MSVC70|MSVC71|MSVC80|MSVC90|MSVC_IDE|MSVC|MSVC_VERSION|XCODE_VERSION|CMAKE_ARCHIVE_OUTPUT_DIRECTORY|CMAKE_AUTOMOC_MOC_OPTIONS|CMAKE_AUTOMOC|CMAKE_AUTORCC|CMAKE_AUTORCC_OPTIONS|CMAKE_AUTOUIC|CMAKE_AUTOUIC_OPTIONS|CMAKE_BUILD_WITH_INSTALL_RPATH|CMAKE_DEBUG_POSTFIX|CMAKE_EXE_LINKER_FLAGS|CMAKE_Fortran_FORMAT|CMAKE_Fortran_MODULE_DIRECTORY|CMAKE_GNUtoMS|CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE|CMAKE_INCLUDE_CURRENT_DIR|CMAKE_INSTALL_NAME_DIR|CMAKE_INSTALL_RPATH|CMAKE_INSTALL_RPATH_USE_LINK_PATH|CMAKE_LIBRARY_OUTPUT_DIRECTORY|CMAKE_LIBRARY_PATH_FLAG|CMAKE_LINK_DEF_FILE_FLAG|CMAKE_LINK_DEPENDS_NO_SHARED|CMAKE_LINK_INTERFACE_LIBRARIES|CMAKE_LINK_LIBRARY_FILE_FLAG|CMAKE_LINK_LIBRARY_FLAG|CMAKE_MACOSX_BUNDLE|CMAKE_MACOSX_RPATH|CMAKE_MODULE_LINKER_FLAGS|CMAKE_NO_BUILTIN_CHRPATH|CMAKE_NO_SYSTEM_FROM_IMPORTED|CMAKE_OSX_ARCHITECTURES|CMAKE_OSX_DEPLOYMENT_TARGET|CMAKE_OSX_SYSROOT|CMAKE_PDB_OUTPUT_DIRECTORY|CMAKE_POSITION_INDEPENDENT_CODE|CMAKE_RUNTIME_OUTPUT_DIRECTORY|CMAKE_SHARED_LINKER_FLAGS|CMAKE_SKIP_BUILD_RPATH|CMAKE_SKIP_INSTALL_RPATH|CMAKE_STATIC_LINKER_FLAGS|CMAKE_TRY_COMPILE_CONFIGURATION|CMAKE_USE_RELATIVE_PATHS|CMAKE_VISIBILITY_INLINES_HIDDEN|CMAKE_WIN32_EXECUTABLE|EXECUTABLE_OUTPUT_PATH|LIBRARY_OUTPUT_PATH|CMAKE_Fortran_MODDIR_DEFAULT|CMAKE_Fortran_MODDIR_FLAG|CMAKE_Fortran_MODOUT_FLAG|CMAKE_INTERNAL_PLATFORM_ABI)(?!(\\.|-|@|#|\\$))\\b");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_DISABLE_FIND_PACKAGE_|CMAKE_EXE_LINKER_FLAGS_|CMAKE_MAP_IMPORTED_CONFIG_|CMAKE_MODULE_LINKER_FLAGS_|CMAKE_PDB_OUTPUT_DIRECTORY_|CMAKE_SHARED_LINKER_FLAGS_|CMAKE_STATIC_LINKER_FLAGS_|CMAKE_COMPILER_IS_GNU)[A-Za-z0-9_]+(?!(\\.|-|@|#|\\$))\\b");
-            highlightingRules.append (rule);
-
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_)[A-Za-z0-9_]+(_POSTFIX|_VISIBILITY_PRESET|_ARCHIVE_APPEND|_ARCHIVE_CREATE|_ARCHIVE_FINISH|_COMPILE_OBJECT|_COMPILER_ABI|_COMPILER_ID|_COMPILER_LOADED|_COMPILER|_COMPILER_EXTERNAL_TOOLCHAIN|_COMPILER_TARGET|_COMPILER_VERSION|_CREATE_SHARED_LIBRARY|_CREATE_SHARED_MODULE|_CREATE_STATIC_LIBRARY|_FLAGS_DEBUG|_FLAGS_MINSIZEREL|_FLAGS_RELEASE|_FLAGS_RELWITHDEBINFO|_FLAGS|_IGNORE_EXTENSIONS|_IMPLICIT_INCLUDE_DIRECTORIES|_IMPLICIT_LINK_DIRECTORIES|_IMPLICIT_LINK_FRAMEWOR)(?!(\\.|-|@|#|\\$))\\b");
-            highlightingRules.append (rule);
-
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(CMAKE_PROJECT_)[A-Za-z0-9_]+(_INCLUDE)(?!(\\.|-|@|#|\\$))\\b");
-            highlightingRules.append (rule);
-
-            /* platforms */
-            keywordFormat.setFontItalic (true);
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(APPLE|CRLF|CYGWIN|DOS|HAIKU|LF|MINGW|MSYS|UNIX|WIN32)(?=$|\\)|\\s)");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-            keywordFormat.setFontItalic (false);
-
-            /* projects */
-            keywordFormat.setForeground (Blue);
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)[A-Za-z0-9_]+(_BINARY_DIR|_SOURCE_DIR|_VERSION|_VERSION_MAJOR|_VERSION_MINOR|_VERSION_PATCH|_VERSION_TWEAK|_SOVERSION)(?!(\\.|-|@|#|\\$))\\b");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-
-            keywordFormat.setForeground (DarkMagenta);
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(AND|OR|NOT)(?=$|\\s)");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(ABSOLUTE|AFTER|ALIAS|ALIASED_TARGET|ALL|ALWAYS|APPEND|ARG_VAR|ARGS|ARCHIVE|ATTACHED_FILES|ATTACHED_FILES_ON_FAIL|AUTHOR_WARNING|BEFORE|BINARY_DIR|BOOL|BRIEF_DOCS|BUNDLE|BYPRODUCTS|CACHE|CACHED_VARIABLE|CLEAR|CMAKE_FIND_ROOT_PATH_BOTH|COMP|COMMAND|COMMENT|COMPONENT|COMPONENTS|CONFIG|CONFIG_MODE|CONFIGS|CONFIGURE_COMMAND|CONFIGURATIONS|COPY|COPYONLY|COMPATIBILITY|COST|CREATE_LINK|DEFAULT_MSG|DEPENDS|DEPENDEES|DEPENDERS|DEPRECATION|DESCRIPTION|DESTINATION|DIRECTORY|DIRECTORY_PERMISSIONS|DISABLED|DISABLED_FEATURES|DOC|DOWNLOAD|DOWNLOAD_COMMAND|DOWNLOAD_DIR|DOWNLOAD_NAME|DOWNLOAD_NO_EXTRACT|DOWNLOAD_NO_PROGRESS|ENABLED_FEATURES|ENCODING|ERROR_VARIABLE|ERROR_FILE|ERROR_QUIET|ERROR_STRIP_TRAILING_WHITESPACE|ESCAPE_QUOTES|EXACT|EXCLUDE|EXCLUDE_FROM_ALL|EXCLUDE_FROM_MAIN|EXPORT|EXPORT_LINK_INTERFACE_LIBRARIES|EXPORT_NAME|EXPORT_PROPERTIES|EXT|FAIL_MESSAGE|FALSE|FATAL_ERROR|FATAL_ON_MISSING_REQUIRED_PACKAGES|FILE_PERMISSIONS|FILENAME|FILEPATH|FILES|FILES_MATCHING|FIND|FILTER|FOLDER|FRAMEWORK|FORCE|FOUND_VAR|FULL_DOCS|GENERATE|GET|GLOB|GLOB_RECURSE|GLOBAL|GROUP_EXECUTE|GROUP_READ|GUARD|HANDLE_COMPONENTS|HINTS|IMMEDIATE|IMPLICIT_DEPENDS|IMPORTED|IN|INDEPENDENT_STEP_TARGETS|INCLUDE_QUIET_PACKAGES|INCLUDES|INPUT_FILE|INSERT|INSTALL|INSTALL_COMMAND|INSTALL_DIR|INSTALL_DESTINATION|INTERNAL|INTERFACE|JOIN|LABELS|LAST_EXT|LENGTH|LIBRARY|LIMIT|LINK_PRIVATE|LINK_PUBLIC|LOCK|LOG|LOG_DIR|MAIN_DEPENDENCY|MAKE_DIRECTORY|MEASUREMENT|MODULE|MODIFIED|NAMELINK_ONLY|NAMELINK_SKIP|NAMESPACE|NAME|NAME_WE|NAME_WLE|NAMES|NEWLINE_STYLE|NO_CHECK_REQUIRED_COMPONENTS_MACRO|NO_CMAKE_BUILDS_PATH|NO_CMAKE_ENVIRONMENT_PATH|NO_CMAKE_FIND_ROOT_PATH|NO_CMAKE_PACKAGE_REGISTRY|NO_CMAKE_PATH|NO_CMAKE_SYSTEM_PACKAGE_REGISTRY|NO_CMAKE_SYSTEM_PATH|NO_DEPENDS|NO_DEFAULT_PATH|NO_MODULE|NO_POLICY_SCOPE|NO_SET_AND_CHECK_MACRO|NO_SOURCE_PERMISSIONS|NO_SYSTEM_ENVIRONMENT_PATH|OBJECT|OFF|OFFSET|ON|ONLY_CMAKE_FIND_ROOT_PATH|OPTIONAL|OPTIONAL_PACKAGES_FOUND|OPTIONAL_PACKAGES_NOT_FOUND|OUTPUT_FILE|OUTPUT_QUIET|OUTPUT_STRIP_TRAILING_WHITESPACE|OUTPUT_VARIABLE|OWNER_EXECUTE|OWNER_READ|OWNER_WRITE|PATH|PACKAGES_FOUND|PACKAGES_NOT_FOUND|PACKAGE_VERSION_FILE|PARENT_SCOPE|PATHS|PATH_SUFFIXES|PATCH_COMMAND|PATH_VARS|PATTERN|PERMISSIONS|PKG_CONFIG_FOUND|PKG_CONFIG_EXECUTABLE|PKG_CONFIG_VERSION_STRING|PRE_BUILD|PRE_LINK|PREFIX|POST_BUILD|PRIVATE|PRIVATE_HEADER|PROGRAM|PROGRAM_ARGS|PROGRAMS|PROPERTY|PROPERTIES|PUBLIC|PUBLIC_HEADER|PURPOSE|QUIET|RANGE|READ|READ_SYMLINK|REALPATH|RECOMMENDED|RECOMMENDED_PACKAGES_FOUND|RECOMMENDED_PACKAGES_NOT_FOUND|REGEX|RELATIVE_PATH|RENAME|REMOVE|REMOVE_AT|REMOVE_DUPLICATES|REMOVE_RECURSE|REMOVE_ITEM|REQUIRED|REQUIRED_PACKAGES_FOUND|REQUIRED_PACKAGES_NOT_FOUND|REQUIRED_VARS|RESOURCE|REVERSE|RESULT_VARIABLE|RESULTS_VARIABLE|RUNTIME|RUNTIME_PACKAGES_FOUND|RUNTIME_PACKAGES_NOT_FOUND|RETURN_VALUE|SEND_ERROR|SHARED|SIZE|SORT|SOURCE|SOURCE_DIR|SOURCE_SUBDIR|SOURCES|SOVERSION|STAMP_DIR|STATIC|STATUS|STEP_TARGETS|STRING|STRINGS|SUBLIST|SUFFIX|SYSTEM|TARGETS|TEST|TIMEOUT|TIMESTAMP|TMP_DIR|TO_CMAKE_PATH|TO_NATIVE_PATH|TOUCH|TOUCH_NOCREATE|TRANSFORM|TRUE|TYPE|UNKNOWN|UPDATE_COMMAND|UPDATE_DISCONNECTED|UPLOAD|URL|URL_HASH|USES_TERMINAL|VAR|VARIABLE|VARIABLE_PREFIX|VERBATIM|VERSION|VERSION_HEADER|VERSION_VAR|WARNING|WHAT|WILL_FAIL|WORKING_DIRECTORY|WRITE)(?=$|\\)|\\s)");
-            highlightingRules.append (rule);
-
-            keywordFormat.setFontWeight (QFont::Bold);
-            keywordFormat.setFontItalic (true);
-            rule.pattern.setPattern ("(?<=^|\\(|\\s)(@ONLY|DEFINED|EQUAL|EXISTS|GREATER|IS_ABSOLUTE|IS_NEWER_THAN|IS_SYMLINK|LESS|MATCHES|STREQUAL|STRGREATER|STRLESS|VERSION_GREATER|VERSION_EQUAL|VERSION_LESS|AnyNewerVersion|ExactVersion|SameMajorVersion)(?=$|\\)|\\s)");
-            rule.format = keywordFormat;
-            highlightingRules.append (rule);
-            keywordFormat.setFontItalic (false);
-        }
-        keywordFormat.setFontWeight (QFont::Bold);
-        keywordFormat.setForeground (Magenta);
-        rule.pattern.setPattern ("((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)\\K(?<!\\${)(sudo\\s+)?((kill|killall|torify|proxychains)\\s+)?(adduser|addgroup|apropos|apt|apt-get|aspell|awk|basename|bash|bc|bsdtar|bunzip2|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmake|cmp|comm|cp|cron|crontab|csplit|curl|cut|cvs|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|dpkg|du|egrep|eject|emacs|env|ethtool|expect|expand|expr|fdformat|fdisk|featherpad|fgrep|file|find|finger|fmt|fold|format|fpad|free|fsck|ftp|function|fuser|gawk|gcc|gio|git|gpg|grep|groups|gunzip|gzip|head|hostname|id|ifconfig|ifdown|ifup|import|install|java|javac|jobs|join|kdialog|kill|killall|less|links|ln|locate|logname|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|mail|make|makepkg|man|mkdir|mkfifo|mkisofs|mknod|mktemp|more|mount|mtools|mv|mmv|nano|netstat|nice|nl|nohup|nslookup|open|op|pacman|passwd|paste|pathchk|perl|pico|pine|ping|pkill|popd|pr|printcap|printenv|proxychains|ps|pwd|python|qarma|qmake(-qt[3-9])*|quota|quotacheck|quotactl|ram|rcp|readarray|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|ruby|screen|scp|sdiff|sed|sftp|shutdown|sleep|slocate|sort|split|ssh|strace|su|sudo|sum|svn|symlink|sync|tail|tar|tee|time|touch|top|torify|traceroute|tr|tsort|tty|type|ulimit|umask|umount|uname|unexpand|uniq|units|unshar|unzip|useradd|usermod|users|usleep|uuencode|uudecode|vdir|vi|vim|vmstat|wall|watch|wc|whereis|which|who|whoami|wget|write|xargs|xeyes|yad|yes|zenity|zip|zypper|7z)(?!(\\.|-|@|#|\\$))\\b");
-        rule.format = keywordFormat;
-        highlightingRules.append (rule);
-    }
-    else
-        keywordFormat.setFontWeight (QFont::Bold);
-    keywordFormat.setForeground (DarkBlue);
-
-    /* types */
-    QTextCharFormat typeFormat;
-    typeFormat.setForeground (DarkMagenta); //(QColor (102, 0, 0));
-
-    const QStringList keywordPatterns = keywords (Lang);
-    for (const QString &pattern : keywordPatterns)
-    {
-        rule.pattern.setPattern (pattern);
-        rule.format = keywordFormat;
-        highlightingRules.append (rule);
-    }
-
-    if (progLan == "qmake")
-    {
-        QTextCharFormat qmakeFormat;
-        /* qmake test functions */
-        qmakeFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("\\b(cache|CONFIG|contains|count|debug|defined|equals|error|eval|exists|export|files|for|greaterThan|if|include|infile|isActiveConfig|isEmpty|isEqual|lessThan|load|log|message|mkpath|packagesExist|prepareRecursiveTarget|qtCompileTest|qtHaveModule|requires|system|touch|unset|warning|write_file)(?=\\s*\\()");
-        rule.format = qmakeFormat;
-        highlightingRules.append (rule);
-        /* qmake paths */
-        qmakeFormat.setForeground (Blue);
-        rule.pattern.setPattern ("\\${1,2}([A-Za-z0-9_]+|\\[[A-Za-z0-9_]+\\]|\\([A-Za-z0-9_]+\\))");
-        rule.format = qmakeFormat;
-        highlightingRules.append (rule);
-    }
-
-    const QStringList typePatterns = types();
-    for (const QString &pattern : typePatterns)
-    {
-        rule.pattern.setPattern (pattern);
-        rule.format = typeFormat;
-        highlightingRules.append (rule);
-    }
-
-    /***********
-     * Details *
-     ***********/
-
-    /* these are used for all comments */
-    commentFormat.setForeground (Red);
-    commentFormat.setFontItalic (true);
-    /* WARNING: This is used by Fountain's synopses too. */
-    noteFormat.setFontWeight (QFont::Bold);
-    noteFormat.setFontItalic (true);
-    noteFormat.setForeground (DarkRed);
-
-    /* these can also be used inside multiline comments */
-    urlFormat.setFontUnderline (true);
-    urlFormat.setForeground (Blue);
-    urlFormat.setFontItalic (true);
-
-    if (progLan == "c" || progLan == "cpp")
-    {
-        QTextCharFormat cFormat;
-
-        /* Qt and Gtk+ specific classes */
-        cFormat.setFontWeight (QFont::Bold);
-        cFormat.setForeground (DarkMagenta);
-        if (progLan == "cpp")
-            rule.pattern.setPattern ("\\bQ[A-Z][A-Za-z0-9]+(?!(\\.|-|@|#|\\$))\\b");
-        else
-            rule.pattern.setPattern ("\\bG[A-Za-z]+(?!(\\.|-|@|#|\\$))\\b");
-        rule.format = cFormat;
-        highlightingRules.append (rule);
-
-        /* Qt's global functions, enums and global colors */
-        if (progLan == "cpp")
-        {
-            cFormat.setFontItalic (true);
-            rule.pattern.setPattern ("\\bq(App)(?!(\\@|#|\\$))\\b|\\bq(Abs|Bound|Critical|Debug|Fatal|FuzzyCompare|InstallMsgHandler|MacVersion|Max|Min|Round64|Round|Version|Warning|getenv|putenv|rand|srand|tTrId|unsetenv|_check_ptr|t_set_sequence_auto_mnemonic|t_symbian_exception2Error|t_symbian_exception2LeaveL|t_symbian_throwIfError)(?!(\\.|-|@|#|\\$))\\b");
-            rule.format = cFormat;
-            highlightingRules.append (rule);
-
-            cFormat.setFontWeight (QFont::Normal);
-            rule.pattern.setPattern ("\\bQt\\s*::\\s*[A-Z][A-Za-z0-9_]+(?!(\\.|-|@|#|\\$))\\b");
-            rule.format = cFormat;
-            highlightingRules.append (rule);
-            cFormat.setFontWeight (QFont::Bold);
-            cFormat.setFontItalic (false);
-
-            cFormat.setForeground (Magenta);
-            rule.pattern.setPattern ("\\bQt\\s*::\\s*(white|black|red|darkRed|green|darkGreen|blue|darkBlue|cyan|darkCyan|magenta|darkMagenta|yellow|darkYellow|gray|darkGray|lightGray|transparent|color0|color1)(?!(\\.|-|@|#|\\$))\\b");
-            rule.format = cFormat;
-            highlightingRules.append (rule);
-        }
-
-        /* preprocess */
-        cFormat.setForeground (Blue);
-        rule.pattern.setPattern ("^\\s*#\\s*include\\s|^\\s*#\\s*ifdef\\s|^\\s*#\\s*elif\\s|^\\s*#\\s*ifndef\\s|^\\s*#\\s*endif\\b|^\\s*#\\s*define\\s|^\\s*#\\s*undef\\s|^\\s*#\\s*error\\s|^\\s*#\\s*if\\s|^\\s*#\\s*else(?!(\\.|-|@|#|\\$))\\b");
-        rule.format = cFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "python")
-    {
-        QTextCharFormat pFormat;
-        pFormat.setFontWeight (QFont::Bold);
-        pFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("\\bself(?!(@|\\$))\\b");
-        rule.format = pFormat;
-        highlightingRules.append (rule);
-    }
-    else if (Lang == "javascript" || progLan == "qml")
-    {
-        QTextCharFormat ft;
-
-        /* after dot (may override keywords) */
-        ft.setForeground (Blue);
-        ft.setFontItalic (true);
-        rule.pattern.setPattern ("(?<=\\.)\\s*[A-Za-z0-9_\\$]+(?=\\s*\\()"); // before parentheses
-        rule.format = ft;
-        highlightingRules.append (rule);
-        ft.setFontItalic (false);
-        rule.pattern.setPattern ("(?<=\\.)\\s*[A-Za-z0-9_\\$]+(?!\\s*\\()(?![A-Za-z0-9_\\$])"); // not before parentheses
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        /* numbers */
-        ft.setForeground (Brown);
-        rule.pattern.setPattern ("(?<=^|[^\\w\\d|@|#|\\$])((\\d*\\.?\\d+|\\d+\\.?\\d*)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)(?=[^\\w\\d]|$)");
-        rule.format = ft;
-        highlightingRules.append (rule);
-
-        if (progLan == "qml")
-        {
-            ft.setFontWeight (QFont::Bold);
-            ft.setForeground (DarkMagenta);
-            rule.pattern.setPattern ("\\b(?<!(@|#|\\$))(Qt([A-Za-z]+)?|Accessible|AnchorAnimation|AnchorChanges|AnimatedImage|AnimatedSprite|Animation|AnimationController|Animator|Behavior|BorderImage|Canvas|CanvasGradient|CanvasImageData|CanvasPixelArray|ColorAnimation|Column|Context2D|DoubleValidator|Drag|DragEvent|DropArea|EnterKey|Flickable|Flipable|Flow|FocusScope|FontLoader|FontMetrics|Gradient|GradientStop|Grid|GridMesh|GridView|Image|IntValidator|Item|ItemGrabResult|KeyEvent|KeyNavigation|Keys|LayoutMirroring|ListView|Loader|Matrix4x4|MouseArea|MouseEvent|MultiPointTouchArea|NumberAnimation|OpacityAnimator|OpenGLInfo|ParallelAnimation|ParentAnimation|ParentChange|Path|PathAnimation|PathArc|PathAttribute|PathCubic|PathCurve|PathElement|PathInterpolator|PathLine|PathPercent|PathQuad|PathSvg|PathView|PauseAnimation|PinchArea|PinchEvent|Positioner|PropertyAction|PropertyAnimation|PropertyChanges|Rectangle|RegExpValidator|Repeater|Rotation|RotationAnimation|RotationAnimator|Row|Scale|ScaleAnimator|ScriptAction|SequentialAnimation|ShaderEffect|ShaderEffectSource|Shortcut|SmoothedAnimation|SpringAnimation|Sprite|SpriteSequence|State|StateChangeScript|StateGroup|SystemPalette|Text|TextEdit|TextInput|TextMetrics|TouchPoint|Transform|Transition|Translate|UniformAnimator|Vector3dAnimation|ViewTransition|WheelEvent|XAnimator|YAnimator|CloseEvent|ColorDialog|ColumnLayout|Dialog|FileDialog|FontDialog|GridLayout|Layout|MessageDialog|RowLayout|StackLayout|LocalStorage|Screen|SignalSpy|TestCase|Window|XmlListModel|XmlRole|Action|ApplicationWindow|BusyIndicator|Button|Calendar|CheckBox|ComboBox|ExclusiveGroup|GroupBox|Label|Menu|MenuBar|MenuItem|MenuSeparator|ProgressBar|RadioButton|ScrollView|Slider|SpinBox|SplitView|Stack|StackView|StackViewDelegate|StatusBar|Switch|Tab|TabView|TableView|TableViewColumn|TextArea|TextField|ToolBar|ToolButton|TreeView|Affector|Age|AngleDirection|Attractor|CumulativeDirection|CustomParticle|Direction|EllipseShape|Emitter|Friction|Gravity|GroupGoal|ImageParticle|ItemParticle|LineShape|MaskShape|Particle|ParticleGroup|ParticlePainter|ParticleSystem|PointDirection|RectangleShape|Shape|SpriteGoal|TargetDirection|TrailEmitter|Turbulence|Wander|Timer)(?!(\\-|@|#|\\$))\\b");
-            rule.format = ft;
-            highlightingRules.append (rule);
-        }
-    }
-    else if (progLan == "xml")
-    {
-        xmlLt.setPattern ("(<|<)");
-        xmlGt.setPattern ("(>|>)");
-
-        QTextCharFormat xmlElementFormat;
-        xmlElementFormat.setFontWeight (QFont::Bold);
-        xmlElementFormat.setForeground (Violet);
-        /* after </ or before /> */
-        rule.pattern.setPattern ("\\s*(<|<)/?[A-Za-z0-9_\\-:]+|\\s*(<|<)!(DOCTYPE|ENTITY|ELEMENT|ATTLIST|NOTATION)\\s|\\s*/?(>|>)");
-        rule.format = xmlElementFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat xmlAttributeFormat;
-        xmlAttributeFormat.setFontItalic (true);
-        xmlAttributeFormat.setForeground (Blue);
-        /* before = */
-        rule.pattern.setPattern ("\\s+[A-Za-z0-9_\\-:]+(?=\\s*\\=\\s*(\"|"))");
-        rule.format = xmlAttributeFormat;
-        highlightingRules.append (rule);
-
-        /* <?xml ... ?> */
-        rule.pattern.setPattern ("^\\s*<\\?xml\\s+(?=.*\\?>)|\\s*\\?>");
-        rule.format = keywordFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "changelog")
-    {
-        /* before colon */
-        rule.pattern.setPattern ("^\\s+\\*\\s+[^:]+:");
-        rule.format = keywordFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat asteriskFormat;
-        asteriskFormat.setForeground (DarkMagenta);
-        /* the first asterisk */
-        rule.pattern.setPattern ("^\\s+\\*\\s+");
-        rule.format = asteriskFormat;
-        highlightingRules.append (rule);
-
-        rule.pattern.setPattern (urlPattern.pattern());
-        rule.format = urlFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "sh" || progLan == "makefile" || progLan == "cmake"
-             || progLan == "perl" || progLan == "ruby")
-    {
-        /* # is the sh comment sign when it doesn't follow a character */
-        if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
-        {
-            rule.pattern.setPattern ("(?<=^|\\s|;)#.*");
-
-            if (progLan == "sh")
-            {
-                /* Kate uses something like: "<<(?:\\s*)([\\\\]{0,1}[^\\s]+)"
-                "<<-" can be used instead of "<<" */
-                hereDocDelimiter.setPattern ("<<-?(?:\\s*)(\\\\{0,1}[A-Za-z0-9_]+)|<<-?(?:\\s*)(\'[A-Za-z0-9_]+\')|<<-?(?:\\s*)(\"[A-Za-z0-9_]+\")");
-            }
-        }
-        else if (progLan == "perl")
-        {
-            rule.pattern.setPattern ("(?<!\\$)#.*"); // $# isn't a comment
-
-            /* without space after "<<" and with ";" at the end */
-            //hereDocDelimiter.setPattern ("<<([A-Za-z0-9_]+)(?:;)|<<(\'[A-Za-z0-9_]+\')(?:;)|<<(\"[A-Za-z0-9_]+\")(?:;)");
-            /* can contain spaces inside quote marks or backquotes and usually has ";" at the end */
-            hereDocDelimiter.setPattern ("<<([A-Za-z0-9_]+)(?:;{0,1})|<<(?:\\s*)(\'[A-Za-z0-9_\\s]+\')(?:;{0,1})|<<(?:\\s*)(\"[A-Za-z0-9_\\s]+\")(?:;{0,1})|<<(?:\\s*)(`[A-Za-z0-9_\\s]+`)(?:;{0,1})");
-        }
-        else
-        {
-            rule.pattern.setPattern ("#.*");
-
-            if (progLan == "ruby")
-                hereDocDelimiter.setPattern ("<<(?:-|~){0,1}([A-Za-z0-9_]+)|<<(\'[A-Za-z0-9_]+\')|<<(\"[A-Za-z0-9_]+\")");
-        }
-        rule.format = commentFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat shFormat;
-
-        if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
-        {
-            /* make parentheses, braces and ; neutral as they were in keyword patterns */
-            rule.pattern.setPattern ("[\\(\\){};]");
-            rule.format = neutralFormat;
-            highlightingRules.append (rule);
-
-            shFormat.setForeground (Blue);
-            /* words before = */
-             if (progLan == "sh")
-                 rule.pattern.setPattern ("\\b[A-Za-z0-9_]+(?=\\=)");
-             else
-                 rule.pattern.setPattern ("\\b[A-Za-z0-9_]+\\s*(?=(\\+|\\?){0,1}\\=)");
-            rule.format = shFormat;
-            highlightingRules.append (rule);
-
-            /* but don't format a word before =
-               if it follows a dash */
-            rule.pattern.setPattern ("-+[^\\s\\\"\\\']+(?=\\=)");
-            rule.format = neutralFormat;
-            highlightingRules.append (rule);
-        }
-
-        if (progLan == "makefile" || progLan == "cmake")
-        {
-            shFormat.setForeground (DarkYellow);
-            /* automake/autoconf variables */
-            rule.pattern.setPattern ("@[A-Za-z0-9_-]+@|^[a-zA-Z0-9_-]+\\s*(?=:)");
-            rule.format = shFormat;
-            highlightingRules.append (rule);
-        }
-
-        shFormat.setForeground (DarkMagenta);
-        /* operators */
-        rule.pattern.setPattern ("[=\\+\\-*/%<>&`\\|~\\^\\!,]|\\s+-eq\\s+|\\s+-ne\\s+|\\s+-gt\\s+|\\s+-ge\\s+|\\s+-lt\\s+|\\s+-le\\s+|\\s+-z\\s+");
-        rule.format = shFormat;
-        highlightingRules.append (rule);
-
-        if (progLan == "sh" || progLan == "makefile" || progLan == "cmake")
-        {
-            shFormat.setFontWeight (QFont::Bold);
-            /* brackets */
-            rule.pattern.setPattern ("\\s+\\[{1,2}\\s+|^\\[{1,2}\\s+|\\s+\\]{1,2}\\s+|\\s+\\]{1,2}$|\\s+\\]{1,2}\\s*(?=;)");
-            rule.format = shFormat;
-            highlightingRules.append (rule);
-        }
-    }
-    else if (progLan == "diff")
-    {
-        QTextCharFormat diffMinusFormat;
-        diffMinusFormat.setForeground (Red);
-        rule.pattern.setPattern ("^\\-.*");
-        rule.format = diffMinusFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat diffPlusFormat;
-        diffPlusFormat.setForeground (Blue);
-        rule.pattern.setPattern ("^\\+.*");
-        rule.format = diffPlusFormat;
-        highlightingRules.append (rule);
-
-        /*diffMinusFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^\\-{3}.*");
-        rule.format = diffMinusFormat;
-        highlightingRules.append (rule);
-
-        diffPlusFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^\\+{3}.*");
-        rule.format = diffPlusFormat;
-        highlightingRules.append (rule);*/
-
-        QTextCharFormat diffLinesFormat;
-        diffLinesFormat.setForeground (DarkBlue);
-        diffLinesFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^diff.*");
-        rule.format = diffLinesFormat;
-        highlightingRules.append (rule);
-
-        diffLinesFormat.setForeground (DarkGreenAlt);
-        rule.pattern.setPattern ("^@{2}[\\d,\\-\\+\\s]+@{2}");
-        rule.format = diffLinesFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "log")
-    {
-        /* example:
-         * May 19 02:01:44 debian sudo:
-         *   blue  green  magenta bold */
-        QTextCharFormat logFormat = neutralFormat;
-        logFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\s+[A-Za-z0-9_\\s]+(?=\\s*:)");
-        rule.format = logFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat logFormat1;
-        logFormat1.setForeground (Magenta);
-        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\s+[A-Za-z0-9_]+(?=\\s|$|:)");
-        rule.format = logFormat1;
-        highlightingRules.append (rule);
-
-        QTextCharFormat logDateFormat;
-        logDateFormat.setFontWeight (QFont::Bold);
-        logDateFormat.setForeground (Blue);
-        rule.pattern.setPattern ("\\b(\\d{4}-\\d{2}-\\d{2}|\\d{2}/(\\d{2}|[A-Za-z]{3})/\\d{4}|\\d{4}/(\\d{2}|[A-Za-z]{3})/\\d{2}|[A-Za-z]{3}\\s+\\d{1,2})(?=(T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\b)");
-        rule.format = logDateFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat logTimeFormat;
-        logTimeFormat.setFontWeight (QFont::Bold);
-        logTimeFormat.setForeground (DarkGreenAlt);
-        rule.pattern.setPattern ("(?<=T|\\s)\\d{2}:\\d{2}(:\\d{2}((\\+|-)\\d+)?)?(AM|PM|am|pm)?\\b");
-        rule.format = logTimeFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat logInOutFormat;
-        logInOutFormat.setFontWeight (QFont::Bold);
-        logInOutFormat.setForeground (Brown);
-        rule.pattern.setPattern ("\\s+IN(?=\\s*\\=)|\\s+OUT(?=\\s*\\=)");
-        rule.format = logInOutFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat logRootFormat;
-        logRootFormat.setFontWeight (QFont::Bold);
-        logRootFormat.setForeground (Red);
-        rule.pattern.setPattern ("\\broot\\b");
-        rule.format = logRootFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "srt")
-    {
-        QTextCharFormat srtFormat;
-        srtFormat.setFontWeight (QFont::Bold);
-
-        /* <...> */
-        srtFormat.setForeground (Violet);
-        rule.pattern.setPattern ("</?[A-Za-z0-9_#\\s\"\\=]+>");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-
-        /* hh:mm:ss,ttt */
-        srtFormat = neutralFormat;
-        srtFormat.setFontItalic (true);
-        srtFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-
-        /* subtitle line */
-        srtFormat.setForeground (Red);
-        rule.pattern.setPattern ("^\\d+$");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-
-        /* hh */
-        srtFormat.setForeground (Blue);
-        rule.pattern.setPattern ("^\\s*\\d{2}(?=:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\K\\d{2}(?=:\\d{2}:\\d{2},\\d{3}\\s*$)");
-        highlightingRules.append (rule);
-
-        /* mm */
-        srtFormat.setForeground (DarkGreenAlt);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\K\\d{2}(?=:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\K\\d{2}(?=:\\d{2},\\d{3}\\s*$)");
-        highlightingRules.append (rule);
-
-        /* ss */
-        srtFormat.setForeground (Brown);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\K\\d{2}(?=,\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\d{2},\\d{3}\\s*$)");
-        rule.format = srtFormat;
-        highlightingRules.append (rule);
-        rule.pattern.setPattern ("^\\s*\\d{2}:\\d{2}:\\d{2},\\d{3}\\s+-->\\s+\\d{2}:\\d{2}:\\K\\d{2}(?=,\\d{3}\\s*$)");
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "desktop" || progLan == "config" || progLan == "theme")
-    {
-        QTextCharFormat desktopFormat = neutralFormat;
-        if (progLan == "config")
-        {
-            desktopFormat.setFontWeight (QFont::Bold);
-            desktopFormat.setFontItalic (true);
-            /* color values */
-            rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
-            rule.format = desktopFormat;
-            highlightingRules.append (rule);
-            desktopFormat.setFontItalic (false);
-            desktopFormat.setFontWeight (QFont::Normal);
-
-            /* URLs */
-            rule.pattern = urlPattern;
-            rule.format = urlFormat;
-            highlightingRules.append (rule);
-        }
-
-        desktopFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("^[^\\=\\[]+=|^[^\\=\\[]+\\[.*\\]=|;|/|%|\\+|-");
-        rule.format = desktopFormat;
-        highlightingRules.append (rule);
-
-        desktopFormat = neutralFormat;
-        desktopFormat.setFontWeight (QFont::Bold);
-        /* [...] */
-        rule.pattern.setPattern ("^\\[.*\\]$");
-        rule.format = desktopFormat;
-        highlightingRules.append (rule);
-
-        desktopFormat.setForeground (Blue);
-        /* [...] and before = (like ...[en]=)*/
-        rule.pattern.setPattern ("^[^\\=\\[]+\\[.*\\](?=\\s*\\=)");
-        rule.format = desktopFormat;
-        highlightingRules.append (rule);
-
-        desktopFormat.setForeground (DarkGreenAlt);
-        /* before = and [] */
-        rule.pattern.setPattern ("^[^\\=\\[]+(?=(\\[.*\\])*\\s*\\=)");
-        rule.format = desktopFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "yaml")
-    {
-        rule.pattern.setPattern ("(?<=^|\\s)#.*");
-        rule.format = commentFormat;
-        highlightingRules.append (rule);
-
-        QTextCharFormat yamlFormat;
-
-        /* keys (a key shouldn't start with a quote but can contain quotes) */
-        yamlFormat.setForeground (Blue);
-        rule.pattern.setPattern ("\\s*[^\\s\"\'#][^:,#]*:(\\s+|$)");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-
-        /* values */
-        // NOTE: This is the first time I use \K with Qt and it seems to work well.
-        yamlFormat.setForeground (Violet);
-        rule.pattern.setPattern ("[^:#]*:\\s+\\K[^#]+");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-
-        /* non-value numbers (including the scientific notation) */
-        yamlFormat.setForeground (Brown);
-        rule.pattern.setPattern ("^((\\s*-\\s)+)?\\s*\\K([-+]?(\\d*\\.?\\d+|\\d+\\.?\\d*)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)\\s*(?=(#|$))");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-
-        /* lists */
-        yamlFormat.setForeground (DarkBlue);
-        yamlFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^(\\s*-(\\s|$))+");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-
-        /* booleans */
-        yamlFormat.setForeground (DarkBlue);
-        yamlFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^((\\s*-\\s)+)?\\s*\\K(true|false|yes|no|TRUE|FALSE|YES|NO|True|False|Yes|No)\\s*(?=(#|$))");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-
-        /* the start of a literal block (-> yamlLiteralBlock()) */
-        codeBlockFormat.setForeground (DarkMagenta);
-        codeBlockFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^[^#]*\\s+\\K(\\||>)-?\\s*$");
-        rule.format = codeBlockFormat;
-        highlightingRules.append (rule);
-
-        yamlFormat.setForeground (Verda);
-        rule.pattern.setPattern ("^---.*");
-        rule.format = yamlFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "fountain")
-    {
-        QTextCharFormat fFormat;
-
-        /* sections */
-        fFormat.setForeground (DarkRed);
-        fFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^\\s*#.*");
-        rule.format = fFormat;
-        highlightingRules.append (rule);
-
-        /* centered */
-        rule.pattern.setPattern (">|<");
-        rule.format = fFormat;
-        highlightingRules.append (rule);
-
-        /* synopses */
-        fFormat.setFontItalic (true);
-        rule.pattern.setPattern ("^\\s*=.*");
-        rule.format = fFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "url")
-    {
-        rule.pattern.setPattern (urlPattern.pattern());
-        rule.format = urlFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "gtkrc")
-    {
-        QTextCharFormat gtkrcFormat;
-        gtkrcFormat.setFontWeight (QFont::Bold);
-        /* color value format (#xyz) */
-        /*gtkrcFormat.setForeground (DarkGreenAlt);
-        rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
-        rule.format = gtkrcFormat;
-        highlightingRules.append (rule);*/
-
-        gtkrcFormat.setForeground (Blue);
-        rule.pattern.setPattern ("(fg|bg|base|text)(\\[NORMAL\\]|\\[PRELIGHT\\]|\\[ACTIVE\\]|\\[SELECTED\\]|\\[INSENSITIVE\\])");
-        rule.format = gtkrcFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "markdown")
-    {
-        /* Inline code is almost like a single-line quote.
-           "`" will be distinguished from "```" at multiLineQuote(). */
-        quoteMark.setPattern ("`");
-
-        blockQuoteFormat.setForeground (DarkGreen);
-        codeBlockFormat.setForeground (DarkRed);
-        QTextCharFormat markdownFormat;
-
-        /* footnotes */
-        markdownFormat.setFontWeight (QFont::Bold);
-        markdownFormat.setForeground (DarkBlue);
-        markdownFormat.setFontItalic (true);
-        rule.pattern.setPattern ("\\[\\^[^\\]]+\\]");
-        rule.format = markdownFormat;
-        highlightingRules.append (rule);
-        markdownFormat.setFontItalic (false);
-
-        /* horizontal rules */
-        markdownFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("^ {0,3}(\\* {0,2}){3,}\\s*$"
-                                 "|"
-                                 "^ {0,3}(- {0,2}){3,}\\s*$"
-                                 "|"
-                                 "^ {0,3}(\\= {0,2}){3,}\\s*$");
-        rule.format = markdownFormat;
-        highlightingRules.append (rule);
-
-        /*
-           links:
-           [link text] [link]
-           [link text] (http://example.com "Title")
-           [link text]: http://example.com
-           <http://example.com>
-        */
-        rule.pattern.setPattern ("\\[[^\\]\\^]*\\]\\s*\\[[^\\]\\s]*\\]"
-                                 "|"
-                                 "\\[[^\\]\\^]*\\]\\s*\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)"
-                                 "|"
-                                 "\\[[^\\]\\^]*\\]:\\s+\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*"
-                                 "|"
-                                 "<([A-Za-z0-9_]+://[A-Za-z0-9_.+/\\?\\=~&%#\\-:\\(\\)\\[\\]]+|[A-Za-z0-9_.\\-]+@[A-Za-z0-9_\\-]+\\.[A-Za-z0-9.]+)>");
-        rule.format = urlFormat;
-        highlightingRules.append (rule);
-
-        /*
-           images:
-           ![image](image.jpg "An image")
-           ![Image][1]
-           [1]: /path/to/image "alt text"
-        */
-        markdownFormat.setFontWeight (QFont::Normal);
-        markdownFormat.setForeground (Violet);
-        markdownFormat.setFontUnderline (true);
-        rule.pattern.setPattern ("\\!\\[[^\\]\\^]*\\]\\s*"
-                                 "(\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)|\\s*\\[[^\\]]*\\])");
-        rule.format = markdownFormat;
-        highlightingRules.append (rule);
-        markdownFormat.setFontUnderline (false);
-
-        /* headings */
-        markdownFormat.setFontWeight (QFont::Bold);
-        markdownFormat.setForeground (Verda);
-        rule.pattern.setPattern ("^#+\\s+.*");
-        rule.format = markdownFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "reST")
-    {
-        /* For bold, italic, verbatim and link
-
-           possible characters before the start:  ([{<:'"/
-           possible characters after the end:     )]}>.,;:-'"/\
-        */
-
-        codeBlockFormat.setForeground (DarkRed);
-        QTextCharFormat reSTFormat;
-
-        /* headings */
-        reSTFormat.setFontWeight (QFont::Bold);
-        reSTFormat.setForeground (Blue);
-        rule.pattern.setPattern ("^([^\\s\\w:])\\1{2,}$");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* lists */
-        reSTFormat.setFontWeight (QFont::Bold);
-        reSTFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("^\\s*(\\*|-|\\+|#\\.|[0-9]+\\.|[0-9]+\\)|\\([0-9]+\\)|[a-zA-Z]\\.|[a-zA-Z]\\)|\\([a-zA-Z]\\))\\s+");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-
-        /* verbatim */
-        quoteFormat.setForeground (Blue);
-        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)``"
-                                 "([^`\\s]((?!``).)*[^`\\s]"
-                                 "|"
-                                 "[^`\\s])"
-                                 "``(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
-        rule.format = quoteFormat;
-        highlightingRules.append (rule);
-
-        /* links */
-        reSTFormat = urlFormat;
-        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)"
-                                 "(`(\\S+|\\S((?!`_ ).)*\\S)`|\\w+|\\[\\w+\\])"
-                                 "_(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        reSTFormat = neutralFormat;
-
-        /* bold */
-        reSTFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)\\*\\*"
-                                 "([^*\\s]|[^*\\s][^*]*[^*\\s])"
-                                 "\\*\\*(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-        reSTFormat.setFontWeight (QFont::Normal);
-
-        /* italic */
-        reSTFormat.setFontItalic (true);
-        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)\\*"
-                                 "([^*\\s]|[^*\\s]+[^*]*[^*\\s])"
-                                 "\\*(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-        reSTFormat.setFontItalic (false);
-
-        /* labels and substitutions (".. _X:" and ".. |X| Y::") */
-        reSTFormat.setForeground (Violet);
-        rule.pattern.setPattern ("^\\s*\\.{2} _[\\w\\s\\-+]*:(?!\\S)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-        rule.pattern.setPattern ("^\\s*\\.{2} \\|[\\w\\s]+\\|\\s+\\w+::(?!\\S)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* aliases ("|X|") */
-        rule.pattern.setPattern ("(?<=[\\s\\(\\[{<:'\\\"/]|^)"
-                                 "\\|(?!\\s)[^|]+\\|"
-                                 "(?=[\\s\\)\\]}>.,;:\\-'\\\"/\\\\]|$)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* footnotes (".. [#X]") */
-        rule.pattern.setPattern ("^\\s*\\.{2} (\\[(\\w|\\s|-|\\+|\\*)+\\]|\\[#(\\w|\\s|-|\\+)*\\])\\s+");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* references */
-        reSTFormat.setForeground (Brown);
-        rule.pattern.setPattern (":[\\w\\-+]+:`[^`]*`");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* ".. X::" (like literalinclude) */
-        reSTFormat.setFontWeight (QFont::Bold);
-        reSTFormat.setForeground (DarkGreen);
-        //rule.pattern.setPattern ("^\\s*\\.{2} literalinclude::(?!\\S)");
-        rule.pattern.setPattern ("^\\s*\\.{2} ((\\w|-)+::(?!\\S)|code-block::)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-
-        /* ":X:" */
-        reSTFormat.setFontWeight (QFont::Normal);
-        reSTFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("^\\s*:[^:]+:(?!\\S)");
-        rule.format = reSTFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "lua")
-    {
-        QTextCharFormat luaFormat;
-        luaFormat.setFontWeight (QFont::Bold);
-        luaFormat.setFontItalic (true);
-        luaFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("\\bos(?=\\.)");
-        rule.format = luaFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "m3u")
-    {
-        QTextCharFormat plFormat = neutralFormat;
-        plFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^#EXTM3U\\b");
-        rule.format = plFormat;
-        highlightingRules.append (rule);
-
-        /* after "," */
-        plFormat.setFontWeight (QFont::Normal);
-        plFormat.setForeground (DarkRed);
-        rule.pattern.setPattern ("^#EXTINF\\s*:[^,]*,\\K.*"); // "^#EXTINF\\s*:\\s*-*\\d+\\s*,.*|^#EXTINF\\s*:\\s*,.*"
-        rule.format = plFormat;
-        highlightingRules.append (rule);
-
-        /* before "," and after "EXTINF:" */
-        plFormat.setForeground (DarkYellow);
-        rule.pattern.setPattern ("^#EXTINF\\s*:\\s*\\K-*\\d+\\b"); // "^#EXTINF\\s*:\\s*-*\\d+\\b"
-        rule.format = plFormat;
-        highlightingRules.append (rule);
-
-        /*plFormat = neutralFormat;
-        rule.pattern.setPattern ("^#EXTINF\\s*:");
-        rule.format = plFormat;
-        highlightingRules.append (rule);*/
-
-        plFormat.setForeground (DarkGreen);
-        plFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("^#EXTINF\\b");
-        rule.format = plFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "scss")
-    {
-        /* scss supports nested css blocks but, instead of making its highlighting complex,
-           we format it without considering that and so, without syntax error, but with keywords() */
-
-        QTextCharFormat scssFormat;
-
-        /* definitions (starting with @) */
-        scssFormat.setForeground (Brown);
-        rule.pattern.setPattern ("\\s*@[A-Za-z-]+\\s+|;\\s*@[A-Za-z-]+\\s+");
-        rule.format = scssFormat;
-        highlightingRules.append (rule);
-
-        /* numbers */
-        scssFormat.setFontItalic (true);
-        rule.pattern.setPattern ("(-|\\+){0,1}\\b\\d*\\.{0,1}\\d+%*");
-        rule.format = scssFormat;
-        highlightingRules.append (rule);
-
-        /* colors */
-        scssFormat.setForeground (Verda);
-        scssFormat.setFontWeight (QFont::Bold);
-        rule.pattern.setPattern ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
-        rule.format = scssFormat;
-        highlightingRules.append (rule);
-
-
-        /* before :...; */
-        scssFormat.setForeground (Blue);
-        scssFormat.setFontItalic (false);
-        /* exclude note patterns artificially */
-        rule.pattern.setPattern ("[A-Za-z0-9_\\-]+(?<!\\bNOTE|\\bTODO|\\bFIXME|\\bWARNING)(?=\\s*:.*;*)");
-        rule.format = scssFormat;
-        highlightingRules.append (rule);
-        scssFormat.setFontWeight (QFont::Normal);
-
-        /* variables ($...) */
-        scssFormat.setFontItalic (true);
-        rule.pattern.setPattern ("\\$[A-Za-z0-9_\\-]+");
-        rule.format = scssFormat;
-        highlightingRules.append (rule);
-    }
-    else if (progLan == "dart")
-    {
-        QTextCharFormat dartFormat;
-
-        /* dart:core classes */
-        dartFormat.setFontWeight (QFont::Bold);
-        dartFormat.setForeground (DarkMagenta);
-        rule.pattern.setPattern ("\\b(BidirectionalIterator|BigInt|Comparable|DateTime|Deprecated|Duration|Expando|Function|Future|Invocation|Iterable|Iterator|List|Map|MapEntry|Match|Object|Pattern|RegExp|RegExpMatch|RuneIterator|Runes|Set|Sink|StackTrace|Stopwatch|Stream|String|StringBuffer|StringSink|Symbol|Type|Uri|UriData)\\b");
-        rule.format = dartFormat;
-        highlightingRules.append (rule);
-    }
-
-    if (showWhiteSpace)
-    {
-        rule.pattern.setPattern ("\\s+");
-        rule.format = whiteSpaceFormat;
-        highlightingRules.append (rule);
-    }
-
-    /************
-     * Comments *
-     ************/
-
-    /* single line comments */
-    rule.pattern.setPattern (QString());
-    if (progLan == "c" || progLan == "cpp"
-        || Lang == "javascript" || progLan == "qml"
-        || progLan == "php" || progLan == "scss"
-        || progLan == "dart")
-    {
-        rule.pattern.setPattern ("//.*"); // why had I set it to ("//(?!\\*).*")?
-    }
-    else if (progLan == "python"
-             || progLan == "qmake"
-             || progLan == "gtkrc")
-    {
-        rule.pattern.setPattern ("#.*"); // or "#[^\n]*"
-    }
-    else if (progLan == "desktop" || progLan == "config" || progLan == "theme")
-    {
-        rule.pattern.setPattern ("^\\s*#.*"); // only at start
-    }
-    /*else if (progLan == "deb")
-    {
-        rule.pattern.setPattern ("^#[^\\s:]+:(?=\\s*)");
-    }*/
-    else if (progLan == "m3u")
-    {
-        rule.pattern.setPattern ("^\\s+#|^#(?!(EXTM3U|EXTINF))");
-    }
-    else if (progLan == "lua")
-        rule.pattern.setPattern ("--(?!\\[).*");
-    else if (progLan == "troff")
-        rule.pattern.setPattern ("\\\\\"|\\\\#|\\.\\s*\\\\\"");
-    else if (progLan == "LaTeX")
-        rule.pattern.setPattern ("%.*");
-    if (!rule.pattern.pattern().isEmpty())
-    {
-        rule.format = commentFormat;
-        highlightingRules.append (rule);
-    }
-
-    /* multiline comments */
-    if (progLan == "c" || progLan == "cpp"
-        || progLan == "javascript" || progLan == "qml"
-        || progLan == "php" || progLan == "css" || progLan == "scss"
-        || progLan == "fountain" || progLan == "dart")
-    {
-        commentStartExpression.setPattern ("/\\*");
-        commentEndExpression.setPattern ("\\*/");
-    }
-    else if (progLan == "lua")
-    {
-        commentStartExpression.setPattern ("\\[\\[|--\\[\\[");
-        commentEndExpression.setPattern ("\\]\\]");
-    }
-    else if (progLan == "python")
-    {
-        commentStartExpression.setPattern ("\"\"\"|\'\'\'");
-        commentEndExpression = commentStartExpression;
-    }
-    else if (progLan == "xml")
-    {
-        commentStartExpression.setPattern ("<!--");
-        commentEndExpression.setPattern ("-->");
-    }
-    else if (progLan == "html")
-    {
-        htmlCommetStart.setPattern ("<!--");
-        htmlCommetEnd.setPattern ("-->");
-
-        /* CSS and JS inside HTML (see htmlCSSHighlighter and htmlJavascript) */
-        htmlSubcommetStart.setPattern ("/\\*");
-        htmlSubcommetEnd.setPattern ("\\*/");
-
-        commentStartExpression = htmlCommetStart;
-        commentEndExpression = htmlCommetEnd;
-    }
-    else if (progLan == "perl")
-    {
-        commentStartExpression.setPattern ("^=[A-Za-z0-9_]+($|\\s+)");
-        commentEndExpression.setPattern ("^=cut.*");
-    }
-    else if (progLan == "markdown")
-    {
-        quoteFormat.setForeground (DarkRed); // not a quote but a code block
-        urlInsideQuoteFormat.setForeground (DarkRed);
-        commentStartExpression.setPattern ("<!--");
-        commentEndExpression.setPattern ("-->");
-    }
-}
-/*************************/
-Highlighter::~Highlighter()
-{
-    if (QTextDocument *doc = document())
-    {
-        QTextOption opt =  doc->defaultTextOption();
-        opt.setFlags (opt.flags() & ~QTextOption::ShowTabsAndSpaces
-                                  & ~QTextOption::ShowLineAndParagraphSeparators
-                                  & ~QTextOption::AddSpaceForLineAndParagraphSeparators
-                                  & ~QTextOption::ShowDocumentTerminator);
-        doc->setDefaultTextOption (opt);
-    }
-}
-/*************************/
-// Should be used only with characters that can be escaped in a language.
-bool Highlighter::isEscapedChar (const QString &text, const int pos) const
-{
-    if (pos < 1) return false;
-    int i = 0;
-    while (pos - i - 1 >= 0 && text.at (pos - i - 1) == '\\')
-        ++i;
-    if (i % 2 != 0)
-        return true;
-    return false;
-}
-/*************************/
-// Checks if a start quote is inside a Yaml key (as in ab""c).
-bool Highlighter::isYamlKeyQuote (const QString &key, const int pos)
-{
-    static int lastKeyQuote = -1;
-    int indx = pos;
-    if (indx > 0 && indx < key.length())
-    {
-        while (indx > 0 && key.at (indx - 1).isSpace())
-            --indx;
-        if (indx > 0)
-        {
-            QChar c = key.at (indx - 1);
-            if (c != '\"' && c != '\'')
-            {
-                lastKeyQuote = pos;
-                return true;
-            }
-            if (lastKeyQuote == indx - 1)
-            {
-                lastKeyQuote = pos;
-                return true;
-            }
-        }
-    }
-    lastKeyQuote = -1;
-    return false;
-}
-/*************************/
-// Check if a start or end quotation mark (positioned at "pos") is escaped.
-// If "skipCommandSign" is true (only for SH), start double quotes are escaped before "$(".
-bool Highlighter::isEscapedQuote (const QString &text, const int pos, bool isStartQuote,
-                                  bool skipCommandSign)
-{
-    if (pos < 0) return false;
-
-    if (progLan == "html" || progLan == "xml")
-        return false;
-
-    /* with markdown, something should be inside quotes */
-    if (progLan == "markdown" && isStartQuote
-        && (pos >= text.length() - 1 || text.at (pos + 1) == '`'))
-    {
-        return true;
-    }
-
-    if (progLan == "yaml")
-    {
-        if (isStartQuote)
-        {
-            if (format (pos) == codeBlockFormat) // inside a literal block
-                return true;
-            QRegularExpressionMatch match;
-            if (text.indexOf (QRegularExpression ("^(\\s*-\\s)+\\s*"), 0, &match) == 0)
-            {
-                if (match.capturedLength() == pos)
-                    return false; // a start quote isn't escaped at the beginning of a list
-            }
-            /* Skip the start quote if it's inside a key or value.
-               NOTE: In keys, "(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*" is used instead of "[^{\\[:,#]*"
-                     because ":" should be followed by a space to make a key-value. */
-            if (format (pos) == neutralFormat)
-            { // inside preformatted braces, when multiLineQuote() is called (not needed; repeated below)
-                int index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
-                if (index > -1 && index <= pos && index + match.capturedLength() > pos
-                    && isYamlKeyQuote (match.captured(), pos - index))
-                {
-                    return true;
-                }
-                index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)[^:#]*:\\s+\\K[^{\\[,#\\s][^,#]*"), pos, &match);
-                if (index > -1 && index < pos && index + match.capturedLength() > pos)
-                    return true;
-            }
-            else
-            {
-                /* inside braces before preformatting (indirectly used by yamlOpenBraces()) */
-                int index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
-                if (index > -1 && index <= pos && index + match.capturedLength() > pos
-                    && isYamlKeyQuote (match.captured(), pos - index))
-                {
-                    return true;
-                }
-                index = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)[^:#]*:\\s+\\K[^{\\[,#\\s][^,#]*"), pos, &match);
-                if (index > -1 && index < pos && index + match.capturedLength() > pos)
-                    return true;
-                /* outside braces */
-                index = text.lastIndexOf (QRegularExpression ("^\\s*\\K(?:(?!(\\{|\\[|,|:\\s|\\s#)).)*(:\\s+)?"), pos, &match);
-                if (index > -1 && index < pos && index + match.capturedLength() > pos
-                    && isYamlKeyQuote (match.captured(), pos - index))
-                {
-                    return true;
-                }
-                index = text.lastIndexOf (QRegularExpression ("^[^:#]*:\\s+\\K[^\\[\\s#].*"), pos, &match);
-                if (index > -1 && index < pos && index + match.capturedLength() > pos)
-                    return true;
-            }
-        }
-        else if (text.length() > pos && text.at (pos) == '\'')
-        { // a pair of single quotes means escaping them
-            static int lastEscapedQuote = -1;
-            if (lastEscapedQuote == pos && pos > 0 && text.at (pos - 1) == '\'') // the second quote
-                return true;
-            if ((pos == 0 || text.at (pos - 1) != '\'' || lastEscapedQuote == pos - 1)
-                && text.length() > pos + 1 && text.at (pos + 1) == '\'')
-            { // the first quote
-                lastEscapedQuote = pos + 1;
-                return true;
-            }
-            lastEscapedQuote = -1;
-        }
-    }
-
-    /* there's no need to check for quote marks because this function is used only with them */
-    /*if (progLan == "perl"
-        && pos != text.indexOf (quoteMark, pos)
-        && pos != text.indexOf ("\'", pos)
-        && pos != text.indexOf ("`", pos))
-    {
-        return false;
-    }
-    if (pos != text.indexOf (quoteMark, pos)
-        && (progLan == "markdown" || pos != text.indexOf (QRegularExpression ("\'"), pos)))
-    {
-        return false;
-    }*/
-
-    /* check if the quote surrounds a here-doc delimiter */
-    if ((currentBlockState() >= endState || currentBlockState() < -1)
-        && currentBlockState() % 2 == 0)
-    {
-        QRegularExpressionMatch match;
-        QRegularExpression delimPart ("<<\\s*");
-        if (text.lastIndexOf (delimPart, pos, &match) == pos - match.capturedLength())
-            return true;
-        if (progLan == "perl") // space is allowed
-            delimPart.setPattern ("<<(?:\\s*)(\'[A-Za-z0-9_\\s]+)|<<(?:\\s*)(\"[A-Za-z0-9_\\s]+)|<<(?:\\s*)(`[A-Za-z0-9_\\s]+)");
-        else
-            delimPart.setPattern ("<<(?:\\s*)(\'[A-Za-z0-9_]+)|<<(?:\\s*)(\"[A-Za-z0-9_]+)");
-        if (text.lastIndexOf (delimPart, pos, &match) == pos - match.capturedLength())
-            return true;
-    }
-
-    /* escaped start quotes are just for Bash, Perl, markdown and yaml */
-    if (isStartQuote)
-    {
-        if (progLan == "perl")
-        {
-            if (pos >= 1)
-            {
-                if (text.at (pos - 1) == '$') // in Perl, $' has a (deprecated?) meaning
-                    return true;
-                if (text.at (pos) == '\'')
-                {
-                    if (text.at (pos - 1) == '&')
-                        return true;
-                    int index = pos - 1;
-                    while (index >= 0 && (text.at (index).isLetterOrNumber() || text.at (index) == '_'))
-                        -- index;
-                    if (index >= 0 && (text.at (index) == '$' || text.at (index) == '@'
-                                       || text.at (index) == '%' || text.at (index) == '*'
-                                       /*|| text.at (index) == '!'*/))
-                    {
-                        return true;
-                    }
-                }
-            }
-            return false; // no other case of escaping at the start
-        }
-        else if (progLan != "sh" && progLan != "makefile" && progLan != "cmake"
-                 && progLan != "markdown" && progLan != "yaml")
-        {
-            return false;
-        }
-    }
-
-    if (isStartQuote && skipCommandSign && text.at (pos) == quoteMark.pattern().at (0)
-        && text.indexOf (QRegularExpression ("[^\"]*\\$\\("), pos) == pos + 1)
-    {
-        return true;
-    }
-
-    int i = 0;
-    while (pos - i > 0 && text.at (pos - i - 1) == '\\')
-        ++i;
-    /* only an odd number of backslashes means that the quote is escaped */
-    if (
-        i % 2 != 0
-        && ((progLan == "yaml"
-             && text.at (pos) == quoteMark.pattern().at (0))
-            /* for these languages, both single and double quotes can be escaped (also for perl?) */
-            || progLan == "c" || progLan == "cpp"
-            || progLan == "javascript" || progLan == "qml"
-            || progLan == "python"
-            || progLan == "perl"
-            || progLan == "dart"
-            || progLan == "lua"
-            /* markdown is an exception */
-            || progLan == "markdown"
-            /* however, in Bash, single quote can be escaped only at start */
-            || ((progLan == "sh" || progLan == "makefile" || progLan == "cmake")
-                && (isStartQuote || text.at (pos) == quoteMark.pattern().at (0))))
-       )
-    {
-        return true;
-    }
-
-    return false;
-}
-/*************************/
-// Checks if a character is inside quotation marks, considering the language
-// (should be used with care because it gives correct results only in special places).
-// If "skipCommandSign" is true (only for SH), start double quotes are escaped before "$(".
-bool Highlighter::isQuoted (const QString &text, const int index,
-                            bool skipCommandSign)
-{
-    if (progLan == "perl") return isPerlQuoted (text, index);
-    if (progLan == "javascript" || progLan == "qml")
-        return isJSQuoted (text, index);
-
-    if (index < 0) return false;
-
-    int pos = -1;
-
-    bool res = false;
-    int N;
-    bool mixedQuotes = false;
-    if (progLan == "c" || progLan == "cpp"
-        || progLan == "python" || progLan == "sh"
-        || progLan == "makefile" || progLan == "cmake"
-        || progLan == "lua"
-        || progLan == "xml" // never used with xml; otherwise, we should consider """
-        || progLan == "ruby" || progLan == "html" || progLan == "scss"
-        || progLan == "yaml" || progLan == "dart")
-    {
-        mixedQuotes = true;
-    }
-    QRegularExpression quoteExpression;
-    if (mixedQuotes)
-        quoteExpression = mixedQuoteMark;
-    else
-        quoteExpression = quoteMark;
-    if (pos == -1)
-    {
-        int prevState = previousBlockState();
-        if ((prevState < doubleQuoteState
-             || prevState > SH_MixedSingleQuoteState)
-                && prevState != htmlStyleSingleQuoteState
-                && prevState != htmlStyleDoubleQuoteState)
-        {
-            N = 0;
-        }
-        else
-        {
-            N = 1;
-            res = true;
-            if (mixedQuotes)
-            {
-                if (prevState == doubleQuoteState
-                    || prevState == SH_DoubleQuoteState
-                    || prevState == SH_MixedDoubleQuoteState
-                    || prevState == htmlStyleDoubleQuoteState)
-                {
-                    quoteExpression = quoteMark;
-                    if (skipCommandSign)
-                    {
-                        if (text.indexOf (QRegularExpression ("[^\"]*\\$\\("), 0) == 0)
-                        {
-                            N = 0;
-                            res = false;
-                        }
-                        else
-                        {
-                            QTextBlock prevBlock = currentBlock().previous();
-                            if (prevBlock.isValid())
-                            {
-                                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                                {
-                                    int N = prevData->openNests();
-                                    if (N > 0 && (prevState == doubleQuoteState || !prevData->openQuotes().contains (N)))
-                                    {
-                                        N = 0;
-                                        res = false;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-                else
-                    quoteExpression.setPattern ("\'");
-            }
-        }
-    }
-    else N = 0; // a new search from the last position
-
-    int nxtPos;
-    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
-    {
-        /* skip formatted comments */
-        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat)
-        {
-            pos = nxtPos;
-            continue;
-        }
-
-        ++N;
-        if ((N % 2 == 0 // an escaped end quote...
-             && isEscapedQuote (text, nxtPos, false))
-            || (N % 2 != 0 // ... or an escaped start quote Bash...
-                && (isEscapedQuote (text, nxtPos, true, skipCommandSign)
-                    || isInsideRegex (text, nxtPos)))) // ... or a start quote inside regex
-        {
-            --N;
-            pos = nxtPos;
-            continue;
-        }
-
-        if (index < nxtPos)
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        /* "pos" might be negative next time */
-        if (N % 2 == 0) res = false;
-        else res = true;
-
-        if (mixedQuotes)
-        {
-            if (N % 2 != 0)
-            { // each quote neutralizes the other until it's closed
-                if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                    quoteExpression = quoteMark;
-                else
-                    quoteExpression.setPattern ("\'");
-            }
-            else
-                quoteExpression = mixedQuoteMark;
-        }
-        pos = nxtPos;
-    }
-
-    return res;
-}
-/*************************/
-// Perl has a separate method to support backquotes.
-// Also see multiLinePerlQuote().
-bool Highlighter::isPerlQuoted (const QString &text, const int index)
-{
-    if (index < 0) return false;
-
-    int pos = -1;
-
-    if (format (index) == quoteFormat || format (index) == altQuoteFormat)
-        return true;
-    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-    {
-        pos = data->lastFormattedQuote() - 1;
-        if (index <= pos) return false;
-    }
-
-    bool res = false;
-    int N;
-    QRegularExpression quoteExpression = mixedQuoteBackquote;
-    if (pos == -1)
-    {
-        int prevState = previousBlockState();
-        if (prevState != doubleQuoteState && prevState != singleQuoteState)
-            N = 0;
-        else
-        {
-            N = 1;
-            res = true;
-            if (prevState == doubleQuoteState)
-                quoteExpression = quoteMark;
-            else
-            {
-                bool backquoted (false);
-                QTextBlock prevBlock = currentBlock().previous();
-                if (prevBlock.isValid())
-                {
-                    TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
-                    if (prevData && prevData->getProperty())
-                        backquoted = true;
-                }
-                if (backquoted)
-                    quoteExpression.setPattern ("`");
-                else
-                    quoteExpression.setPattern ("\'");
-            }
-        }
-    }
-    else N = 0; // a new search from the last position
-
-    int nxtPos;
-    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
-    {
-        /* skip formatted comments */
-        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat
-            || (N % 2 == 0 && isMLCommented (text, nxtPos, commentState)))
-        {
-            pos = nxtPos;
-            continue;
-        }
-
-        ++N;
-        if ((N % 2 == 0 // an escaped end quote...
-             && isEscapedQuote (text, nxtPos, false))
-            || (N % 2 != 0 // ... or an escaped start quote
-                && (isEscapedQuote (text, nxtPos, true, false) || isInsideRegex (text, nxtPos))))
-        {
-            if (res)
-            { // -> isEscapedRegex()
-                pos = qMax (pos, 0);
-                if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                    setFormat (pos, nxtPos - pos + 1, quoteFormat);
-                else
-                    setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
-            }
-            --N;
-            pos = nxtPos;
-            continue;
-        }
-
-        if (N % 2 == 0)
-        { // -> isEscapedRegex()
-            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                data->insertLastFormattedQuote (nxtPos + 1);
-            pos = qMax (pos, 0);
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                setFormat (pos, nxtPos - pos + 1, quoteFormat);
-            else
-                setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
-        }
-
-        if (index < nxtPos)
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        /* "pos" might be negative next time */
-        if (N % 2 == 0) res = false;
-        else res = true;
-
-        if (N % 2 != 0)
-        { // each quote neutralizes the other until it's closed
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                quoteExpression = quoteMark;
-            else if (text.at (nxtPos) == '\'')
-                quoteExpression.setPattern ("\'");
-            else
-                quoteExpression.setPattern ("`");
-        }
-        else
-            quoteExpression = mixedQuoteBackquote;
-        pos = nxtPos;
-    }
-
-    return res;
-}
-/*************************/
-// JS has a separate method to support backquotes (template literals).
-// Also see multiLineJSlQuote().
-bool Highlighter::isJSQuoted (const QString &text, const int index)
-{
-    if (index < 0) return false;
-
-    int pos = -1;
-
-    /* with regex, the text will be formatted below to know whether
-       the regex start sign is quoted (-> isEscapedRegex) */
-    if (format (index) == quoteFormat || format (index) == altQuoteFormat)
-        return true;
-    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-    {
-        pos = data->lastFormattedQuote() - 1;
-        if (index <= pos) return false;
-    }
-
-    bool res = false;
-    int N;
-    QRegularExpression quoteExpression = mixedQuoteBackquote;
-    if (pos == -1)
-    {
-        int prevState = previousBlockState();
-        if (prevState != doubleQuoteState
-            && prevState != singleQuoteState
-            && prevState != JS_templateLiteralState)
-        {
-            N = 0;
-        }
-        else
-        {
-            N = 1;
-            res = true;
-            if (prevState == doubleQuoteState)
-                quoteExpression = quoteMark;
-            else if (prevState == singleQuoteState)
-                quoteExpression.setPattern ("\'");
-            else
-                quoteExpression.setPattern ("`");
-        }
-    }
-    else N = 0; // a new search from the last position
-
-    int nxtPos;
-    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
-    {
-        /* skip formatted comments */
-        if (format (nxtPos) == commentFormat || format (nxtPos) == urlFormat
-            || (N % 2 == 0
-                && (isMLCommented (text, nxtPos, commentState)
-                    || isMLCommented (text, nxtPos, htmlJavaCommentState))))
-        {
-            pos = nxtPos;
-            continue;
-        }
-
-        ++N;
-        if ((N % 2 == 0 // an escaped end quote...
-             && isEscapedQuote (text, nxtPos, false))
-            || (N % 2 != 0 // ... or a start quote inside regex (JS has no escaped start quote)
-                && isInsideRegex (text, nxtPos)))
-        {
-            if (res)
-            { // -> isEscapedRegex()
-                pos = qMax (pos, 0);
-                if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                    setFormat (pos, nxtPos - pos + 1, quoteFormat);
-                else
-                    setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
-            }
-            --N;
-            pos = nxtPos;
-            continue;
-        }
-
-        if (N % 2 == 0)
-        { // -> isEscapedRegex()
-            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                data->insertLastFormattedQuote (nxtPos + 1);
-            pos = qMax (pos, 0);
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                setFormat (pos, nxtPos - pos + 1, quoteFormat);
-            else
-                setFormat (pos, nxtPos - pos + 1, altQuoteFormat);
-        }
-
-        if (index < nxtPos)
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        /* "pos" might be negative next time */
-        if (N % 2 == 0) res = false;
-        else res = true;
-
-        if (N % 2 != 0)
-        { // each quote neutralizes the other until it's closed
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                quoteExpression = quoteMark;
-            else if (text.at (nxtPos) == '\'')
-                quoteExpression.setPattern ("\'");
-            else
-                quoteExpression.setPattern ("`");
-        }
-        else
-            quoteExpression = mixedQuoteBackquote;
-        pos = nxtPos;
-    }
-
-    return res;
-}
-/*************************/
-// Checks if a start quote or a start single-line comment sign is inside a multiline comment.
-// If "start" > 0, it will be supposed that "start" is not inside a previous comment.
-// (May give an incorrect result with other characters and works only with real comments
-// whose state is "comState".)
-bool Highlighter::isMLCommented (const QString &text, const int index, int comState,
-                                 const int start)
-{
-    if (index < 0 || start < 0 || index < start
-        // commentEndExpression is always set if commentStartExpression is
-        || commentStartExpression.pattern().isEmpty())
-    {
-        return false;
-    }
-
-    /* not for Python */
-    if (progLan == "python") return false;
-
-    int prevState = previousBlockState();
-    if (prevState == nextLineCommentState)
-        return true; // see singleLineComment()
-
-    bool res = false;
-    int pos = start - 1;
-    int N;
-    QRegularExpressionMatch commentMatch;
-    QRegularExpression commentExpression;
-    if (pos >= 0 || prevState != comState)
-    {
-        N = 0;
-        commentExpression = commentStartExpression;
-    }
-    else
-    {
-        N = 1;
-        res = true;
-        commentExpression = commentEndExpression;
-    }
-
-    while ((pos = text.indexOf (commentExpression, pos + 1, &commentMatch)) >= 0)
-    {
-        /* skip formatted quotations and regex */
-        QTextCharFormat fi = format (pos);
-        if (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-            || fi == regexFormat) // see multiLineRegex() for the reason
-        {
-            continue;
-        }
-
-        ++N;
-
-        /* All (or most) multiline comments have more than one character
-           and this trick is needed for knowing if a double slash follows
-           an asterisk without using "lookbehind", for example. */
-        if (index < pos + (N % 2 == 0 ? commentMatch.capturedLength() : 0))
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        if (N % 2 != 0)
-        {
-            commentExpression = commentEndExpression;
-            res = true;
-        }
-        else
-        {
-            commentExpression = commentStartExpression;
-            res = false;
-        }
-    }
-
-    return res;
-}
-/*************************/
-// This handles multiline python comments separately because they aren't normal.
-// It comes after singleLineComment() and before multiLineQuote().
-void Highlighter::pythonMLComment (const QString &text, const int indx)
-{
-    if (progLan != "python") return;
-
-    /* we reset the block state because this method is also called
-       during the multiline quotation formatting after clearing formats */
-    setCurrentBlockState (-1);
-
-    int index = indx;
-    int quote;
-
-    /* find the start quote */
-    int prevState = previousBlockState();
-    if (prevState != pyDoubleQuoteState
-        && prevState != pySingleQuoteState)
-    {
-        index = text.indexOf (commentStartExpression, indx);
-
-        QTextCharFormat fi = format (index);
-        while ((index > 0 && isQuoted (text, index - 1)) // because two quotes may follow an end quote
-               || (index == 0 && (prevState == doubleQuoteState || prevState == singleQuoteState))
-               || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat) // not needed
-        {
-            index = text.indexOf (commentStartExpression, index + 3);
-            fi = format (index);
-        }
-        if (format (index) == commentFormat || format (index) == urlFormat)
-            return; // inside a single-line comment
-
-        /* if the comment start is found... */
-        if (index >= indx)
-        {
-            /* ... distinguish between double and single quotes */
-            if (index == text.indexOf (QRegularExpression ("\"\"\""), index))
-            {
-                commentStartExpression.setPattern ("\"\"\"");
-                quote = pyDoubleQuoteState;
-            }
-            else
-            {
-                commentStartExpression.setPattern ("\'\'\'");
-                quote = pySingleQuoteState;
-            }
-        }
-    }
-    else // but if we're inside a triple quotation...
-    {
-        /* ... distinguish between the two quote kinds
-           by checking the previous line */
-        quote = prevState;
-        if (quote == pyDoubleQuoteState)
-            commentStartExpression.setPattern ("\"\"\"");
-        else
-            commentStartExpression.setPattern ("\'\'\'");
-    }
-
-    while (index >= indx)
-    {
-        /* if the search is continued... */
-        if (commentStartExpression.pattern() == "\"\"\"|\'\'\'")
-        {
-            /* ... distinguish between double and single quotes
-               again because the quote mark may have changed... */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                commentStartExpression.setPattern ("\"\"\"");
-                quote = pyDoubleQuoteState;
-            }
-            else
-            {
-                commentStartExpression.setPattern ("\'\'\'");
-                quote = pySingleQuoteState;
-            }
-        }
-
-        /* search for the end quote from the start quote */
-        QRegularExpressionMatch startMatch;
-        int endIndex = text.indexOf (commentStartExpression, index + 3, &startMatch);
-
-        /* but if there's no start quote ... */
-        if (index == indx
-            && (prevState == pyDoubleQuoteState || prevState == pySingleQuoteState))
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (commentStartExpression, indx, &startMatch);
-        }
-
-        /* check if the quote is escaped */
-        while ((endIndex > 0 && text.at (endIndex - 1) == '\\'
-                /* backslash shouldn't be escaped itself */
-                && (endIndex < 2 || text.at (endIndex - 2) != '\\'))
-                   /* also consider ^' and ^" */
-                   || ((endIndex > 0 && text.at (endIndex - 1) == '^')
-                       && (endIndex < 2 || text.at (endIndex - 2) != '\\')))
-        {
-            endIndex = text.indexOf (commentStartExpression, endIndex + 3, &startMatch);
-        }
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            setCurrentBlockState (quote);
-            quoteLength = text.length() - index;
-        }
-        else
-            quoteLength = endIndex - index
-                          + startMatch.capturedLength(); // 3
-        setFormat (index, quoteLength, commentFormat);
-
-        /* format urls and email addresses inside the comment */
-        QString str = text.mid (index, quoteLength);
-        int pIndex = 0;
-        QRegularExpressionMatch urlMatch;
-        while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-        {
-            setFormat (pIndex + index, urlMatch.capturedLength(), urlFormat);
-            pIndex += urlMatch.capturedLength();
-        }
-        /* format note patterns too */
-        pIndex = 0;
-        while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-        {
-            if (format (pIndex + index) != urlFormat)
-                setFormat (pIndex + index, urlMatch.capturedLength(), noteFormat);
-            pIndex += urlMatch.capturedLength();
-        }
-
-        /* the next quote may be different */
-        commentStartExpression.setPattern ("\"\"\"|\'\'\'");
-        index = text.indexOf (commentStartExpression, index + quoteLength);
-        QTextCharFormat fi = format (index);
-        while ((index > 0 && isQuoted (text, index - 1))
-               || (index == 0 && (prevState == doubleQuoteState || prevState == singleQuoteState))
-               || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-        {
-            index = text.indexOf (commentStartExpression, index + 3);
-            fi = format (index);
-        }
-        if (format (index) == commentFormat || format (index) == urlFormat)
-            return;
-    }
-}
-/*************************/
-void Highlighter::singleLineComment (const QString &text, const int start)
-{
-    for (const HighlightingRule &rule : qAsConst (highlightingRules))
-    {
-        if (rule.format == commentFormat)
-        {
-            int startIndex = qMax (start, 0);
-            if (previousBlockState() == nextLineCommentState)
-                startIndex = 0;
-            else
-            {
-                startIndex = text.indexOf (rule.pattern, startIndex);
-                /* skip quoted comments (and, automatically, those inside multiline python comments) */
-                while (startIndex > -1
-                       && (isQuoted (text, startIndex) || isInsideRegex (text, startIndex)
-                           /* with troff and LaTeX, the comment sign may be escaped */
-                           || ((progLan == "troff" || progLan == "LaTeX")
-                               && isEscapedChar(text, startIndex))))
-                {
-                    startIndex = text.indexOf (rule.pattern, startIndex + 1);
-                }
-            }
-            if (startIndex > -1)
-            {
-                int l = text.length();
-                setFormat (startIndex, l - startIndex, commentFormat);
-
-                /* also format urls and email addresses inside the comment */
-                QString str = text.mid (startIndex, l - startIndex);
-                int pIndex = 0;
-                QRegularExpressionMatch urlMatch;
-                while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-                {
-                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
-                    pIndex += urlMatch.capturedLength();
-                }
-                /* format note patterns too */
-                pIndex = 0;
-                while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-                {
-                    if (format (pIndex + startIndex) != urlFormat)
-                        setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
-                    pIndex += urlMatch.capturedLength();
-                }
-
-                if (progLan == "javascript" || progLan == "qml")
-                {
-                    /* see NOTE of isEscapedRegex() and also the end of multiLineRegex() */
-                    setCurrentBlockState (regexExtraState);
-                }
-                else if ((progLan == "c" || progLan == "cpp")
-                         && text.endsWith (QLatin1Char('\\')))
-                {
-                    /* Take care of next-line comments with languages, for which
-                       no highlighting function is called after singleLineComment()
-                       and before the main formatting in highlightBlock()
-                       (only c and c++ for now). */
-                    setCurrentBlockState (nextLineCommentState);
-                }
-            }
-            break;
-        }
-    }
-}
-/*************************/
-void Highlighter::multiLineComment (const QString &text,
-                                    const int index,
-                                    const QRegularExpression &commentStartExp, const QRegularExpression &commentEndExp,
-                                    const int commState,
-                                    const QTextCharFormat &comFormat)
-{
-    if (index < 0) return;
-    int prevState = previousBlockState();
-    if (prevState == nextLineCommentState)
-        return;  // was processed by singleLineComment()
-
-    /* CSS can have huge lines, which will take
-       a lot of CPU time if they're formatted completely. */
-    //bool hugeText = ((progLan == "css" || progLan == "scss" ) && text.length() > 50000);
-
-    int startIndex = index;
-
-    QRegularExpressionMatch startMatch;
-    QRegularExpressionMatch endMatch;
-
-    if (startIndex > 0
-        || (prevState != commState
-            && prevState != commentInCssBlockState
-            && prevState != commentInCssValueState))
-    {
-        startIndex = text.indexOf (commentStartExp, startIndex, &startMatch);
-        /* skip single-line comments */
-        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
-            startIndex = -1;
-        /* skip quotations (usually all formatted to this point) */
-        QTextCharFormat fi = format (startIndex);
-        while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-        {
-            startIndex = text.indexOf (commentStartExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-
-        /* special handling for markdown */
-        if (progLan == "markdown" && startIndex > 0)
-        {
-            int extraBlockIndentation = 0;
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                    extraBlockIndentation = prevData->labelInfo().length();
-            }
-            if (text.indexOf (QRegularExpression ("^#+\\s+.*"), 0) == 0
-                || text.indexOf (QRegularExpression (QStringLiteral ("^( {")
-                                                     + QString::number (4 + extraBlockIndentation)
-                                                     + QStringLiteral (",}|\\s*\\t+\\s*).*")), 0) == 0)
-            {
-                return; // no comment start sign inside headings or code blocks
-            }
-            /* no comment start sign inside footnotes, images or links */
-            QRegularExpressionMatch mMatch;
-            static const QRegularExpression mExp ("\\[\\^[^\\]]+\\]"
-                                                  "|"
-                                                  "\\!\\[[^\\]\\^]*\\]\\s*"
-                                                  "(\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)|\\s*\\[[^\\]]*\\])"
-                                                  "|"
-                                                  "\\[[^\\]\\^]*\\]\\s*\\[[^\\]\\s]*\\]"
-                                                  "|"
-                                                  "\\[[^\\]\\^]*\\]\\s*\\(\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*\\s*\\)"
-                                                  "|"
-                                                  "\\[[^\\]\\^]*\\]:\\s+\\s*[^\\)\\(\\s]+(\\s+\\\".*\\\")*");
-            int mStart = text.indexOf (mExp, 0, &mMatch);
-            while (mStart >= 0 && mStart < startIndex)
-            {
-                int mEnd = mStart + mMatch.capturedLength();
-                if (startIndex < mEnd)
-                {
-                    startIndex = text.indexOf (commentStartExp, mEnd, &startMatch);
-                    if (startIndex == -1) return;
-                }
-                mStart = text.indexOf (mExp, mEnd, &mMatch);
-            }
-        }
-    }
-
-    while (startIndex >= 0)
-    {
-        int badIndex = -1;
-        int endIndex;
-        /* when the comment start is in the prvious line
-           and the search for the comment end has just begun... */
-        if ((prevState == commState
-             || prevState == commentInCssBlockState
-             || prevState == commentInCssValueState)
-            && startIndex == 0)
-            /* ... search for the comment end from the line start */
-            endIndex = text.indexOf (commentEndExp, 0, &endMatch);
-        else
-            endIndex = text.indexOf (commentEndExp,
-                                     startIndex + startMatch.capturedLength(),
-                                     &endMatch);
-
-        /* skip quotations */
-        QTextCharFormat fi = format (endIndex);
-        if (progLan != "fountain") // in Fountain, altQuoteFormat is used for notes
-        { // FIXME: Is this really needed? Commented quotes are skipped in formatting multi-line quotes.
-            while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-            {
-                endIndex = text.indexOf (commentEndExp, endIndex + 1, &endMatch);
-                fi = format (endIndex);
-            }
-        }
-
-        /* if there's a comment end ... */
-        if (/*!hugeText && */endIndex >= 0 && progLan != "xml" && progLan != "html")
-        {
-            /* ... clear the comment format from there to reformat later as
-               a single-line comment sign may have been commented out now */
-            badIndex = endIndex + endMatch.capturedLength();
-            for (int i = badIndex; i < text.length(); ++i)
-            {
-                if (format (i) == commentFormat || format (i) == urlFormat)
-                    setFormat (i, 1, neutralFormat);
-            }
-        }
-
-        int commentLength;
-        if (endIndex == -1)
-        {
-            if (currentBlockState() != cssBlockState
-                && currentBlockState() != cssValueState)
-            {
-                setCurrentBlockState (commState);
-            }
-            else
-            { // CSS
-                if (currentBlockState() == cssValueState)
-                    setCurrentBlockState (commentInCssValueState);
-                else
-                    setCurrentBlockState (commentInCssBlockState);
-            }
-            commentLength = text.length() - startIndex;
-        }
-        else
-            commentLength = endIndex - startIndex
-                            + endMatch.capturedLength();
-        //if (!hugeText)
-        //{
-            setFormat (startIndex, commentLength, comFormat);
-
-            /* format urls and email addresses inside the comment */
-            QString str = text.mid (startIndex, commentLength);
-            int pIndex = 0;
-            QRegularExpressionMatch urlMatch;
-            while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-            {
-                setFormat (pIndex + startIndex, urlMatch.capturedLength(), urlFormat);
-                pIndex += urlMatch.capturedLength();
-            }
-            /* format note patterns too */
-            pIndex = 0;
-            while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-            {
-                if (format (pIndex + startIndex) != urlFormat)
-                    setFormat (pIndex + startIndex, urlMatch.capturedLength(), noteFormat);
-                pIndex += urlMatch.capturedLength();
-            }
-        //}
-
-        startIndex = text.indexOf (commentStartExp, startIndex + commentLength, &startMatch);
-
-        /* reformat from here if the format was cleared before */
-        if (/*!hugeText && */badIndex >= 0)
-        {
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            {
-                if (rule.format == commentFormat)
-                {
-                    int INDX = text.indexOf (rule.pattern, badIndex);
-                    fi = format (INDX);
-                    while (fi == quoteFormat
-                           || fi == altQuoteFormat
-                           || fi == urlInsideQuoteFormat
-                           || isMLCommented (text, INDX, commState, endIndex + endMatch.capturedLength()))
-                    {
-                        INDX = text.indexOf (rule.pattern, INDX + 1);
-                        fi = format (INDX);
-                    }
-                    if (INDX >= 0)
-                    {
-                        setFormat (INDX, text.length() - INDX, commentFormat);
-                        /* URLs and notes were cleared too */
-                        QString str = text.mid (INDX, text.length() - INDX);
-                        int pIndex = 0;
-                        QRegularExpressionMatch urlMatch;
-                        while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-                        {
-                            setFormat (pIndex + INDX, urlMatch.capturedLength(), urlFormat);
-                            pIndex += urlMatch.capturedLength();
-                        }
-                        pIndex = 0;
-                        while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-                        {
-                            if (format (pIndex + INDX) != urlFormat)
-                                setFormat (pIndex + INDX, urlMatch.capturedLength(), noteFormat);
-                            pIndex += urlMatch.capturedLength();
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-
-        /* skip single-line comments and quotations again */
-        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat)
-            startIndex = -1;
-        fi = format (startIndex);
-        while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-        {
-            startIndex = text.indexOf (commentStartExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-    }
-
-    /* reset the block state if this line created a next-line comment
-       whose starting single-line comment sign is commented out now */
-    if (currentBlockState() == nextLineCommentState
-        && format (text.size() - 1) != commentFormat && format (text.size() - 1) != urlFormat)
-    {
-        setCurrentBlockState (0);
-    }
-}
-/*************************/
-// Handles escaped backslashes too.
-bool Highlighter::textEndsWithBackSlash (const QString &text)
-{
-    QString str = text;
-    int n = 0;
-    while (!str.isEmpty() && str.endsWith ("\\"))
-    {
-        str.truncate (str.size() - 1);
-        ++n;
-    }
-    return (n % 2 != 0);
-}
-/*************************/
-// This also covers single-line quotes. It comes after single-line comments
-// and before multi-line ones are formatted. "comState" is the comment state,
-// whose default is "commentState" but may be different for some languages.
-// Sometimes (with multi-language docs), formatting should be started from "start".
-bool Highlighter::multiLineQuote (const QString &text, const int start, int comState)
-{
-    if (progLan == "perl")
-    {
-        multiLinePerlQuote (text);
-        return false;
-    }
-    if (progLan == "javascript" || progLan == "qml")
-    {
-        multiLineJSlQuote (text, start, comState);
-        return false;
-    }
-//--------------------
-    /* these are only for C++11 raw string literals,
-       whose pattern is R"(\bR"([^(]*)\(.*(?=\)\1"))" */
-    bool rehighlightNextBlock = false;
-    QString delimStr;
-    QTextCharFormat rFormat;
-    TextBlockData *cppData = nullptr;
-    if (progLan == "cpp")
-    {
-        rFormat = quoteFormat;
-        rFormat.setFontWeight (QFont::Bold);
-        cppData = static_cast<TextBlockData *>(currentBlock().userData());
-        QTextBlock prevBlock = currentBlock().previous();
-        if (prevBlock.isValid())
-        {
-            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                delimStr = prevData->labelInfo();
-        }
-    }
-//--------------------
-
-    int index = start;
-    bool mixedQuotes = false;
-    if (progLan == "c" || progLan == "cpp"
-        || progLan == "python"
-        /*|| progLan == "sh"*/ // bash uses SH_MultiLineQuote()
-        || progLan == "makefile" || progLan == "cmake"
-        || progLan == "lua"
-        || progLan == "ruby" || progLan == "scss"
-        || progLan == "yaml" || progLan == "dart")
-    {
-        mixedQuotes = true;
-    }
-    QRegularExpressionMatch quoteMatch;
-    QRegularExpression quoteExpression;
-    if (mixedQuotes)
-        quoteExpression = mixedQuoteMark;
-    else
-        quoteExpression = quoteMark;
-    int quote = doubleQuoteState;
-
-    /* find the start quote */
-    int prevState = previousBlockState();
-    if ((prevState != doubleQuoteState
-         && prevState != singleQuoteState)
-        || index > 0)
-    {
-        index = text.indexOf (quoteExpression, index);
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true)
-               || isInsideRegex (text, index)
-               || isMLCommented (text, index, comState))
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-        while (format (index) == commentFormat || format (index) == urlFormat) // single-line and Python
-            index = text.indexOf (quoteExpression, index + 1);
-
-        /* with markdown, "`" should be distinguished from "```" for code bocks (-> highlightBlock()) */
-        if (index >= 0 && progLan == "markdown")
-        {
-            while (index >= 0 && index == text.indexOf (QRegularExpression ("```(?!`)"), index))
-            {
-                index = text.indexOf (quoteExpression, index + 3);
-                while (isEscapedQuote (text, index, true)
-                       || isMLCommented (text, index, comState))
-                {
-                    index = text.indexOf (quoteExpression, index + 1);
-                }
-                while (format (index) == commentFormat || format (index) == urlFormat)
-                    index = text.indexOf (quoteExpression, index + 1);
-            }
-        }
-
-        /* if the start quote is found... */
-        if (index >= 0)
-        {
-            if (mixedQuotes)
-            {
-                /* ... distinguish between double and single quotes */
-                if (text.at (index) == quoteMark.pattern().at (0))
-                {
-                    if (progLan == "cpp" && index > start)
-                    {
-                        QRegularExpressionMatch cppMatch;
-                        if (text.at (index - 1) == 'R' && index - 1 == text.indexOf (QRegularExpression (R"(\bR"([^(]*)\()"), index - 1, &cppMatch))
-                        {
-                            delimStr = ")" + cppMatch.captured (1);
-                            setFormat (index - 1, 1, rFormat);
-                        }
-                    }
-                    quoteExpression = quoteMark;
-                    quote = doubleQuoteState;
-                }
-                else
-                {
-                    quoteExpression.setPattern ("\'");
-                    quote = singleQuoteState;
-                }
-            }
-        }
-    }
-    else // but if we're inside a quotation...
-    {
-        /* ... distinguish between the two quote kinds
-           by checking the previous line */
-        if (mixedQuotes)
-        {
-            quote = prevState;
-            if (quote == doubleQuoteState)
-                quoteExpression = quoteMark;
-            else
-                quoteExpression.setPattern ("\'");
-        }
-    }
-
-    while (index >= 0)
-    {
-        /* if the search is continued... */
-        if (quoteExpression == mixedQuoteMark)
-        {
-            /* ... distinguish between double and single quotes
-               again because the quote mark may have changed */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                if (progLan == "cpp" && index > start)
-                {
-                    QRegularExpressionMatch cppMatch;
-                    if (text.at (index - 1) == 'R'  && index - 1 == text.indexOf (QRegularExpression (R"(\bR"([^(]*)\()"), index - 1, &cppMatch))
-                    {
-                        delimStr = ")" + cppMatch.captured (1);
-                        setFormat (index - 1, 1, rFormat);
-                    }
-                }
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else
-            {
-                quoteExpression.setPattern ("\'");
-                quote = singleQuoteState;
-            }
-        }
-
-        int endIndex;
-        /* if there's no start quote ... */
-        if (index == 0
-            && (prevState == doubleQuoteState || prevState == singleQuoteState))
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
-        }
-        else // otherwise, search from the start quote
-            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
-
-        if (delimStr.isEmpty())
-        { // check if the quote is escaped
-            while (isEscapedQuote (text, endIndex, false))
-                endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
-        }
-        else
-        { // check if the quote is inside a C++11 raw string literal
-            while (endIndex > -1
-                   && (endIndex - delimStr.length() < start
-                       || text.mid (endIndex - delimStr.length(), delimStr.length()) != delimStr))
-            {
-                endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
-            }
-        }
-
-        bool isQuotation = true;
-        if (endIndex == -1)
-        {
-            if (progLan == "c" || progLan == "cpp")
-            {
-                /* In c and cpp, multiline double quotes need backslash and
-                   there's no multiline single quote. Moreover, In C++11,
-                   there can be multiline raw string literals. */
-                if (quoteExpression.pattern() == "\'"
-                    || (quoteExpression == quoteMark && delimStr.isEmpty() && !textEndsWithBackSlash (text)))
-                {
-                    endIndex = text.length();
-                }
-            }
-            else if (progLan == "markdown")
-            { // this is the main difference of a markdown inline code from a single-line quote
-                isQuotation = false;
-            }
-        }
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            if (isQuotation)
-                setCurrentBlockState (quote);
-            quoteLength = text.length() - index;
-
-            /* set the delimiter string for C++11 */
-            if (cppData && !delimStr.isEmpty())
-            {
-                /* with a multiline C++11 raw string literal, if the delimiter is changed
-                   but the state of the current block isn't changed, the next block won't
-                   be highlighted automatically, so it should be rehighlighted forcefully */
-                if (cppData->lastState() == quote)
-                {
-                    QTextBlock nextBlock = currentBlock().next();
-                    if (nextBlock.isValid())
-                    {
-                        if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
-                        {
-                            if (nextData->labelInfo() != delimStr)
-                                rehighlightNextBlock = true;
-                        }
-                    }
-                }
-                cppData->insertInfo (delimStr);
-                setCurrentBlockUserData (cppData);
-            }
-        }
-        else
-            quoteLength = endIndex - index
-                          + quoteMatch.capturedLength(); // 1 or 0 (open quotation without ending backslash)
-        if (isQuotation)
-        {
-            setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
-                                                                        : altQuoteFormat);
-            /* URLs should be formatted in a different way inside quotes because,
-               otherwise, there would be no difference between URLs inside quotes and
-               those inside comments and so, they couldn't be escaped correctly when needed. */
-            QString str = text.mid (index, quoteLength);
-            int urlIndex = 0;
-            QRegularExpressionMatch urlMatch;
-            while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
-            {
-                 setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
-                 urlIndex += urlMatch.capturedLength();
-            }
-        }
-
-        /* the next quote may be different */
-        if (mixedQuotes)
-            quoteExpression = mixedQuoteMark;
-        index = text.indexOf (quoteExpression, index + quoteLength);
-
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true)
-               || isInsideRegex (text, index)
-               || isMLCommented (text, index, comState, endIndex + 1))
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-        while (format (index) == commentFormat || format (index) == urlFormat)
-            index = text.indexOf (quoteExpression, index + 1);
-
-        if (index >= 0 && progLan == "markdown")
-        {
-            while (index >= 0 && index == text.indexOf (QRegularExpression ("```(?!`)"), index))
-            {
-                index = text.indexOf (quoteExpression, index + 3);
-                while (isEscapedQuote (text, index, true)
-                       || isMLCommented (text, index, comState))
-                {
-                    index = text.indexOf (quoteExpression, index + 1);
-                }
-                while (format (index) == commentFormat || format (index) == urlFormat)
-                    index = text.indexOf (quoteExpression, index + 1);
-            }
-        }
-        delimStr.clear();
-    }
-    return rehighlightNextBlock;
-}
-/*************************/
-// Perl's multiline quote highlighting comes here to support backquotes.
-// Also see isPerlQuoted().
-void Highlighter::multiLinePerlQuote (const QString &text)
-{
-    int index = 0;
-    QRegularExpressionMatch quoteMatch;
-    QRegularExpression quoteExpression = mixedQuoteBackquote;
-    int quote = doubleQuoteState;
-
-    /* find the start quote */
-    int prevState = previousBlockState();
-    if (prevState != doubleQuoteState && prevState != singleQuoteState)
-    {
-        index = text.indexOf (quoteExpression, index);
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true) || isInsideRegex (text, index))
-            index = text.indexOf (quoteExpression, index + 1);
-        while (format (index) == commentFormat || format (index) == urlFormat)
-            index = text.indexOf (quoteExpression, index + 1);
-
-        /* if the start quote is found... */
-        if (index >= 0)
-        {
-            /* ... distinguish between the three kinds of quote */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else
-            {
-                if (text.at (index) == '\'')
-                    quoteExpression.setPattern ("\'");
-                else
-                    quoteExpression.setPattern ("`");
-                quote = singleQuoteState;
-            }
-        }
-    }
-    else // but if we're inside a quotation...
-    {
-        /* ... distinguish between the three kinds of quote */
-        quote = prevState;
-        if (quote == doubleQuoteState)
-            quoteExpression = quoteMark;
-        else
-        {
-            bool backquoted (false);
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            {
-                TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData());
-                if (prevData && prevData->getProperty())
-                    backquoted = true;
-            }
-            if (backquoted)
-                quoteExpression.setPattern ("`");
-            else
-                quoteExpression.setPattern ("\'");
-        }
-    }
-
-    while (index >= 0)
-    {
-        /* if the search is continued... */
-        if (quoteExpression == mixedQuoteBackquote)
-        {
-            /* ... distinguish between the three kinds of quote
-               again because the quote mark may have changed */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else
-            {
-                if (text.at (index) == '\'')
-                    quoteExpression.setPattern ("\'");
-                else
-                    quoteExpression.setPattern ("`");
-                quote = singleQuoteState;
-            }
-        }
-
-        int endIndex;
-        /* if there's no start quote ... */
-        if (index == 0
-            && (prevState == doubleQuoteState || prevState == singleQuoteState))
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
-        }
-        else // otherwise, search from the start quote
-            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
-
-        // check if the quote is escaped
-        while (isEscapedQuote (text, endIndex, false))
-            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            setCurrentBlockState (quote);
-            if (quoteExpression.pattern() == "`")
-            {
-                if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                    data->setProperty (true);
-                /* NOTE: The next block will be rehighlighted at highlightBlock()
-                         (-> multiLineRegex (text, 0);) if the property is changed. */
-            }
-            quoteLength = text.length() - index;
-        }
-        else
-            quoteLength = endIndex - index
-                          + quoteMatch.capturedLength(); // 1
-        setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
-                                                                    : altQuoteFormat);
-        QString str = text.mid (index, quoteLength);
-        int urlIndex = 0;
-        QRegularExpressionMatch urlMatch;
-        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
-        {
-             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
-             urlIndex += urlMatch.capturedLength();
-        }
-
-        /* the next quote may be different */
-        quoteExpression = mixedQuoteBackquote;
-        index = text.indexOf (quoteExpression, index + quoteLength);
-
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true) || isInsideRegex (text, index))
-            index = text.indexOf (quoteExpression, index + 1);
-        while (format (index) == commentFormat || format (index) == urlFormat)
-            index = text.indexOf (quoteExpression, index + 1);
-    }
-}
-/*************************/
-// JS multiline quote highlighting comes here to support backquotes (template literals).
-// Also see isJSQuoted().
-void Highlighter::multiLineJSlQuote (const QString &text, const int start, int comState)
-{
-    int index = start;
-    QRegularExpressionMatch quoteMatch;
-    QRegularExpression quoteExpression = mixedQuoteBackquote;
-    int quote = doubleQuoteState;
-
-    /* find the start quote */
-    int prevState = previousBlockState();
-    if ((prevState != doubleQuoteState
-         && prevState != singleQuoteState
-         && prevState != JS_templateLiteralState)
-        || index > 0)
-    {
-        index = text.indexOf (quoteExpression, index);
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true)
-               || isInsideRegex (text, index)
-               || isMLCommented (text, index, comState))
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-        while (format (index) == commentFormat || format (index) == urlFormat) // single-line
-            index = text.indexOf (quoteExpression, index + 1);
-
-        /* if the start quote is found... */
-        if (index >= 0)
-        {
-            /* ... distinguish between double and single quotes */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else if (text.at (index) == '\'')
-            {
-                quoteExpression.setPattern ("\'");
-                quote = singleQuoteState;
-            }
-            else
-            {
-                quoteExpression.setPattern ("`");
-                quote = JS_templateLiteralState;
-            }
-        }
-    }
-    else // but if we're inside a quotation...
-    {
-        /* ... distinguish between the two quote kinds
-           by checking the previous line */
-        quote = prevState;
-        if (quote == doubleQuoteState)
-            quoteExpression = quoteMark;
-        else if (quote == singleQuoteState)
-            quoteExpression.setPattern ("\'");
-        else
-            quoteExpression.setPattern ("`");
-    }
-
-    while (index >= 0)
-    {
-        /* if the search is continued... */
-        if (quoteExpression == mixedQuoteBackquote)
-        {
-            /* ... distinguish between double and single quotes
-               again because the quote mark may have changed */
-            if (text.at (index) == quoteMark.pattern().at (0))
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else if (text.at (index) == '\'')
-            {
-                quoteExpression.setPattern ("\'");
-                quote = singleQuoteState;
-            }
-            else
-            {
-                quoteExpression.setPattern ("`");
-                quote = JS_templateLiteralState;
-            }
-        }
-
-        int endIndex;
-        /* if there's no start quote ... */
-        if (index == 0
-            && (prevState == doubleQuoteState || prevState == singleQuoteState
-                || prevState == JS_templateLiteralState))
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
-        }
-        else // otherwise, search from the start quote
-            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
-
-        /* check if the quote is escaped */
-        while (isEscapedQuote (text, endIndex, false))
-            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            /* In JS, multiline double and single quotes need backslash. */
-            if ((quoteExpression.pattern() == "\'" || quoteExpression == quoteMark)
-                && !textEndsWithBackSlash (text))
-            { // see NOTE of isEscapedRegex() and also the end of multiLineRegex()
-                setCurrentBlockState (regexExtraState);
-            }
-            else
-                setCurrentBlockState (quote);
-            quoteLength = text.length() - index;
-        }
-        else
-            quoteLength = endIndex - index
-                          + quoteMatch.capturedLength(); // 1
-
-        setFormat (index, quoteLength, quoteExpression == quoteMark ? quoteFormat
-                                                                    : altQuoteFormat);
-
-        QString str = text.mid (index, quoteLength);
-        int urlIndex = 0;
-        QRegularExpressionMatch urlMatch;
-        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
-        {
-            setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
-            urlIndex += urlMatch.capturedLength();
-        }
-
-        /* the next quote may be different */
-        quoteExpression = mixedQuoteBackquote;
-        index = text.indexOf (quoteExpression, index + quoteLength);
-
-        /* skip escaped start quotes and all comments */
-        while (isEscapedQuote (text, index, true)
-               || isInsideRegex (text, index)
-               || isMLCommented (text, index, comState, endIndex + 1))
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-        while (format (index) == commentFormat || format (index) == urlFormat)
-            index = text.indexOf (quoteExpression, index + 1);
-    }
-}
-/*************************/
-// Generalized form of setFormat(), where "oldFormat" shouldn't be reformatted.
-void Highlighter::setFormatWithoutOverwrite (int start,
-                                             int count,
-                                             const QTextCharFormat &newFormat,
-                                             const QTextCharFormat &oldFormat)
-{
-    int index = start; // always >= 0
-    int indx;
-    while (index < start + count)
-    {
-        QTextCharFormat fi = format (index);
-        while (index < start + count
-               && (fi == oldFormat
-                   /* skip comments and quotes */
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            ++ index;
-            fi = format (index);
-        }
-        if (index < start + count)
-        {
-            indx = index;
-            fi = format (indx);
-            while (indx < start + count
-                   && fi != oldFormat
-                   && fi != commentFormat && fi != urlFormat
-                   && fi != quoteFormat && fi != altQuoteFormat && fi != urlInsideQuoteFormat)
-            {
-                ++ indx;
-                fi = format (indx);
-            }
-            setFormat (index, indx - index , newFormat);
-            index = indx;
-        }
-    }
-}
-/*************************/
-// XML quotes are handled as multiline quotes for possible XML doc mistakes
-// to be seen easily and also because the double quote can be written as """.
-// This comes after values are formatted.
-void Highlighter::xmlQuotes (const QString &text)
-{
-    int index = 0;
-    /* mixed quotes aren't really needed here but they're harmless and easy to handle */
-    static const QRegularExpression xmlMixedQuote ("\"|"|\'");
-    static const QRegularExpression doubleQuote ("\"|"");
-    static const QRegularExpression virtualQuote (""");
-    QRegularExpressionMatch quoteMatch;
-    QRegularExpression quoteExpression = xmlMixedQuote;
-    int quote = doubleQuoteState;
-
-    /* find the start quote */
-    int prevState = previousBlockState();
-    if (prevState != doubleQuoteState
-        && prevState != singleQuoteState)
-    {
-        index = text.indexOf (quoteExpression);
-        /* skip all comments and all values (that are formatted by multiLineComment()) */
-        while (isMLCommented (text, index, commentState)
-               || format (index) == neutralFormat)
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-
-        /* if the start quote is found... */
-        if (index >= 0)
-        {
-            /* ... distinguish between double, virtual and single quotes */
-            if (text.at (index) == '\"')
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else if (text.mid (index, 6) == """)
-            {
-                quoteExpression = virtualQuote;
-                quote = doubleQuoteState;
-            }
-            else
-            {
-                quoteExpression.setPattern ("\'");
-                quote = singleQuoteState;
-            }
-        }
-    }
-    else // but if we're inside a quotation...
-    {
-        /* ... distinguish between the two quote kinds
-           by checking the previous line */
-        quote = prevState;
-        if (quote == doubleQuoteState)
-            quoteExpression = doubleQuote;
-        else
-            quoteExpression.setPattern ("\'");
-    }
-
-    while (index >= 0)
-    {
-        /* if the search is continued... */
-        if (quoteExpression == xmlMixedQuote)
-        {
-            /* ... distinguish between double, virtual and single
-               quotes again because the quote mark may have changed */
-            if (text.at (index) == '\"')
-            {
-                quoteExpression = quoteMark;
-                quote = doubleQuoteState;
-            }
-            else if (text.mid (index, 6) == """)
-            {
-                quoteExpression = virtualQuote;
-                quote = doubleQuoteState;
-            }
-            else
-            {
-                quoteExpression.setPattern ("\'");
-                quote = singleQuoteState;
-            }
-        }
-
-        /* search for the end quote from the start quote */
-        int endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
-
-        /* but if there's no start quote ... */
-        if (index == 0
-            && (prevState == doubleQuoteState || prevState == singleQuoteState))
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
-        }
-
-        if (endIndex == -1)
-        {
-            /* tolerate a mismatch between `"` and `"` as far as possible
-               but show the error by formatting `>` or `>` */
-            QRegularExpressionMatch match;
-            int closing = text.indexOf (xmlGt, index, &match);
-            if (closing > -1)
-                endIndex = closing + match.capturedLength();
-        }
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            setCurrentBlockState (quote);
-            quoteLength = text.length() - index;
-        }
-        else
-            quoteLength = endIndex - index
-                          + quoteMatch.capturedLength();
-        setFormat (index, quoteLength,
-                   quoteExpression == quoteMark
-                   || quoteExpression == virtualQuote ? quoteFormat : altQuoteFormat);
-
-        QString str = text.mid (index, quoteLength);
-        int urlIndex = 0;
-        QRegularExpressionMatch urlMatch;
-        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
-        {
-             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
-             urlIndex += urlMatch.capturedLength();
-        }
-
-        /* the next quote may be different */
-        quoteExpression = xmlMixedQuote;
-        index = text.indexOf (quoteExpression, index + quoteLength);
-
-        while (isMLCommented (text, index, commentState, endIndex + quoteMatch.capturedLength())
-               || format (index) == neutralFormat)
-        {
-            index = text.indexOf (quoteExpression, index + 1);
-        }
-    }
-}
-/*************************/
-// Check if the current block is inside a "here document" and format it accordingly.
-// (Open quotes aren't taken into account when they happen after the start delimiter.)
-bool Highlighter::isHereDocument (const QString &text)
-{
-    /*if (progLan != "sh" && progLan != "makefile" && progLan != "cmake"
-        && progLan != "perl" && progLan != "ruby")
-    {
-        return false;
-        // "<<([A-Za-z0-9_]+)|<<(\'[A-Za-z0-9_]+\')|<<(\"[A-Za-z0-9_]+\")"
-    }*/
-
-    QTextBlock prevBlock = currentBlock().previous();
-    int prevState = previousBlockState();
-
-    QTextCharFormat blockFormat;
-    blockFormat.setForeground (Violet);
-    QTextCharFormat delimFormat = blockFormat;
-    delimFormat.setFontWeight (QFont::Bold);
-    QString delimStr;
-
-    /* format the start delimiter */
-    if (!prevBlock.isValid()
-        || (prevState >= 0 && prevState < endState))
-    {
-        int pos = 0;
-        QRegularExpressionMatch match;
-        while ((pos = text.indexOf (hereDocDelimiter, pos, &match)) >= 0
-               && (isQuoted (text, pos, progLan == "sh") // escaping start double quote before "$("
-                   || (progLan == "perl" && isInsideRegex (text, pos))))
-
-        {
-            pos += match.capturedLength();
-        }
-        if (pos >= 0)
-        {
-            int insideCommentPos;
-            if (progLan == "sh")
-            {
-                static const QRegularExpression commentSH ("^#.*|\\s+#.*");
-                insideCommentPos = text.indexOf (commentSH);
-            }
-            else
-            {
-                static const QRegularExpression commentOthers ("#.*");
-                insideCommentPos = text.indexOf (commentOthers);
-            }
-            if (insideCommentPos == -1 || pos < insideCommentPos
-                || isQuoted (text, insideCommentPos, progLan == "sh")
-                || (progLan == "perl" && isInsideRegex (text, insideCommentPos)))
-            { // the delimiter isn't (single-)commented out
-                int i = 1;
-                while ((delimStr = match.captured (i)).isEmpty() && i <= 3)
-                {
-                    ++i;
-                    delimStr = match.captured (i);
-                }
-
-                if (progLan == "perl")
-                {
-                    bool ok;
-                    delimStr.toInt (&ok, 10);
-                    if (ok)
-                        delimStr = QString(); // don't mistake shift-left operator with here-doc delimiter
-                    else if (delimStr.contains ('`')) // Perl's delimiter can have backquotes
-                        delimStr = delimStr.split ('`').at (1);
-                }
-
-                if (!delimStr.isEmpty())
-                {
-                    /* remove quotes */
-                    if (delimStr.contains ('\''))
-                        delimStr = delimStr.split ('\'').at (1);
-                    if (delimStr.contains ('\"'))
-                        delimStr = delimStr.split ('\"').at (1);
-                    /* remove the start backslash if it exists */
-                    if (QString (delimStr.at (0)) == "\\")
-                        delimStr = delimStr.remove (0, 1);
-                }
-
-                if (!delimStr.isEmpty())
-                {
-                    int n = static_cast<int>(qHash (delimStr));
-                    int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0)); // always an even number but maybe negative
-                    if (progLan == "sh")
-                    {
-                        if (isQuoted (text, pos, false))
-                        { // to know whether a double quote is added/removed before "$(" in the current line
-                            state > 0 ? state += 2 : state -= 2;
-                        }
-                        if (prevState == doubleQuoteState || prevState == SH_DoubleQuoteState)
-                        { // to know whether a double quote is added/removed before "$(" in a previous line
-                            state > 0 ? state += 4 : state -= 4; // not 2 -> not to be canceled above
-                        }
-                    }
-                    setCurrentBlockState (state);
-                    setFormat (text.indexOf (delimStr, pos),
-                               delimStr.length(),
-                               delimFormat);
-
-                    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-                    if (!data) return false;
-                    data->insertInfo (delimStr);
-                    setCurrentBlockUserData (data);
-
-                    return false;
-                }
-            }
-        }
-    }
-
-    if (prevState >= endState || prevState < -1)
-    {
-        TextBlockData *prevData = nullptr;
-        if (prevBlock.isValid())
-            prevData = static_cast<TextBlockData *>(prevBlock.userData());
-        if (!prevData) return false;
-
-        delimStr = prevData->labelInfo();
-        int l = 0;
-        if (progLan == "perl" || progLan == "ruby")
-        {
-            QRegularExpressionMatch rMatch;
-            QRegularExpression r ("\\s*" + delimStr + "(?=(\\W+|$))");
-            if (text.indexOf (r, 0, &rMatch) == 0)
-                l = rMatch.capturedLength();
-        }
-        else if (text == delimStr
-                 || (text.startsWith (delimStr)
-                     && text.indexOf (QRegularExpression ("\\W+")) == delimStr.length()))
-        {
-            l = delimStr.length();
-        }
-        if (l > 0)
-        {
-            /* format the end delimiter */
-            setFormat (0, l, delimFormat);
-            return false;
-        }
-        else
-        {
-            /* format the contents */
-            TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-            if (!data) return false;
-            data->insertInfo (delimStr);
-            /* inherit the previous data property and open nests */
-            if (bool p = prevData->getProperty())
-                data->setProperty (p);
-            int N = prevData->openNests();
-            if (N > 0)
-            {
-                data->insertNestInfo (N);
-                QSet<int> Q = prevData->openQuotes();
-                if (!Q.isEmpty())
-                    data->insertOpenQuotes (Q);
-            }
-            setCurrentBlockUserData (data);
-            if (prevState % 2 == 0)
-                setCurrentBlockState (prevState - 1);
-            else
-                setCurrentBlockState (prevState);
-            setFormat (0, text.length(), blockFormat);
-
-            /* also, format whitespaces */
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            {
-                if (rule.format == whiteSpaceFormat)
-                {
-                    QRegularExpressionMatch match;
-                    int index = text.indexOf (rule.pattern, 0, &match);
-                    while (index >= 0)
-                    {
-                        setFormat (index, match.capturedLength(), rule.format);
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                    }
-                    break;
-                }
-            }
-
-            return true;
-        }
-    }
-
-    return false;
-}
-/*************************/
-// This function formats Markdown's block quotes and code blocks.
-// The start and end expressions always include the line start.
-// The end expression includes the line end too.
-bool Highlighter::markdownMultiLine (const QString &text,
-                                     const QString &oldStartPattern,
-                                     const QRegularExpression &startExp, const QRegularExpression &endExp,
-                                     const int state,
-                                     const QTextCharFormat &txtFormat)
-{
-    QRegularExpression endRegex;
-    bool isBlockQuote = false;
-
-    if (startExp.pattern().startsWith ("^\\s{0,"))
-    {
-        isBlockQuote = true;
-        endRegex = endExp;
-    }
-
-    int prevState = previousBlockState();
-
-    QRegularExpressionMatch startMatch;
-    QRegularExpressionMatch endMatch;
-
-    if (prevState != state)
-    {
-        int startIndex = text.indexOf (startExp, 0, &startMatch);
-        if (startIndex == -1)
-            return false; // nothing to format
-        if (format (startIndex) == commentFormat || format (startIndex) == urlFormat
-            || format (startIndex) == quoteFormat)
-        {
-            return false; // this is a comment or quote
-        }
-    }
-
-    bool res = false;
-
-    if (isBlockQuote)
-    {
-        /* don't continue the previous block quote if this line is a list */
-        if (prevState == state)
-        {
-            int extraBlockIndentation = 0;
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            { // the label info is about indentation in this case
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                    extraBlockIndentation = prevData->labelInfo().length();
-            }
-            QRegularExpression listRegex (QStringLiteral ("^ {0,")
-                                          + QString::number (3 + extraBlockIndentation)
-                                          + QStringLiteral ("}((\\*\\s+){1,}|(\\+\\s+){1,}|(\\-\\s+){1,}|\\d+\\.\\s+|\\d+\\)\\s+)"));
-            if (text.indexOf (listRegex) > -1)
-                return false;
-        }
-    }
-    else
-    {
-        if (prevState == state)
-        {
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            { // the label info is about end regex in this case
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                    endRegex.setPattern (prevData->labelInfo());
-            }
-        }
-        else
-        { // get the end regex from the start regex
-            QString str = startMatch.captured(); // is never empty
-            str += QString (str.at (0));
-            endRegex.setPattern (QStringLiteral ("^\\s*\\K") + str + QStringLiteral ("*(?!\\s*\\S)"));
-        }
-    }
-
-    int endIndex = !isBlockQuote && prevState != state ? // the start of a code block can be ```
-                       -1 : text.indexOf (endRegex, 0, &endMatch);
-    int L;
-    if (endIndex == -1)
-    {
-        L = text.length();
-        setCurrentBlockState (state);
-        if (!isBlockQuote)
-        {
-            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-            {
-                data->insertInfo (endRegex.pattern());
-                if (data->lastState() == state && oldStartPattern != endRegex.pattern())
-                    res = true;
-            }
-        }
-    }
-    else
-        L = endIndex + endMatch.capturedLength();
-    setFormat (0, L, txtFormat);
-
-    /* format urls and email addresses inside block quotes and code blocks */
-    QString str = text.mid (0, L);
-    int pIndex = 0;
-    QRegularExpressionMatch urlMatch;
-    while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-    {
-        setFormat (pIndex, urlMatch.capturedLength(), urlFormat);
-        pIndex += urlMatch.capturedLength();
-    }
-    /* format note patterns too */
-    pIndex = 0;
-    while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-    {
-        if (format (pIndex) != urlFormat)
-            setFormat (pIndex, urlMatch.capturedLength(), noteFormat);
-        pIndex += urlMatch.capturedLength();
-    }
-
-    return res;
-}
-/*************************/
-void Highlighter::markdownFonts (const QString &text)
-{
-    QTextCharFormat boldFormat = neutralFormat;
-    boldFormat.setFontWeight (QFont::Bold);
-
-    QTextCharFormat italicFormat = neutralFormat;
-    italicFormat.setFontItalic (true);
-
-    QTextCharFormat boldItalicFormat = italicFormat;
-    boldItalicFormat.setFontWeight (QFont::Bold);
-
-    /* NOTE: Apparently, all browsers use expressions similar to the following ones.
-             However, these patterns aren't logical. For example, escaping an asterisk
-             isn't always equivalent to its removal with regard to boldness/italicity.
-             It also seems that five successive asterisks are ignored at start. */
-
-    QRegularExpressionMatch italicMatch;
-    static const QRegularExpression italicExp ("(?<!\\\\|\\*{4})\\*([^*]|(?:(?<!\\*)\\*\\*))+\\*|(?<!\\\\|_{4})_([^_]|(?:(?<!_)__))+_"); // allow double asterisks inside
-
-    QRegularExpressionMatch boldcMatch;
-    //const QRegularExpression boldExp ("\\*\\*(?!\\*)(?:(?!\\*\\*).)+\\*\\*|__(?:(?!__).)+__}");
-    static const QRegularExpression boldExp ("(?<!\\\\|\\*{3})\\*\\*([^*]|(?:(?<!\\*)\\*))+\\*\\*|(?<!\\\\|_{3})__([^_]|(?:(?<!_)_))+__"); // allow single asterisks inside
-
-    static const QRegularExpression boldItalicExp ("(?<!\\\\|\\*{2})\\*{3}([^*]|(?:(?<!\\*)\\*))+\\*{3}|(?<!\\\\|_{2})_{3}([^_]|(?:(?<!_)_))+_{3}");
-
-    QRegularExpressionMatch expMatch;
-    const QRegularExpression exp (boldExp.pattern() + "|" + italicExp.pattern() + "|" + boldItalicExp.pattern());
-
-    int index = 0;
-    while ((index = text.indexOf (exp, index, &expMatch)) > -1)
-    {
-        if (format (index) == mainFormat && format (index + expMatch.capturedLength() - 1) == mainFormat)
-        {
-            if (index == text.indexOf (boldItalicExp, index))
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-            }
-            else if (index == text.indexOf (boldExp, index, &boldcMatch) && boldcMatch.capturedLength() == expMatch.capturedLength())
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldFormat, whiteSpaceFormat);
-                /* also format italic bold strings */
-                QString str = text.mid (index + 2, expMatch.capturedLength() - 4);
-                int indx = 0;
-                while ((indx = str.indexOf (italicExp, indx, &italicMatch)) > -1)
-                {
-                    setFormatWithoutOverwrite (index + 2 + indx, italicMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-                    indx += italicMatch.capturedLength();
-                }
-            }
-            else
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), italicFormat, whiteSpaceFormat);
-                /* also format bold italic strings */
-                QString str = text.mid (index + 1, expMatch.capturedLength() - 2);
-                int indx = 0;
-                while ((indx = str.indexOf (boldExp, indx, &boldcMatch)) > -1)
-                {
-                    setFormatWithoutOverwrite (index + 1 + indx, boldcMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-                    indx += boldcMatch.capturedLength();
-                }
-
-            }
-            index += expMatch.capturedLength();
-        }
-        else ++index;
-    }
-}
-/*************************/
-void Highlighter::fountainFonts (const QString &text)
-{
-    QTextCharFormat boldFormat = neutralFormat;
-    boldFormat.setFontWeight (QFont::Bold);
-
-    QTextCharFormat italicFormat = neutralFormat;
-    italicFormat.setFontItalic (true);
-
-    QTextCharFormat boldItalicFormat = italicFormat;
-    boldItalicFormat.setFontWeight (QFont::Bold);
-
-    QRegularExpressionMatch italicMatch, boldcMatch, expMatch;
-    static const QRegularExpression italicExp ("(?<!\\\\)\\*([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*");
-    static const QRegularExpression boldExp ("(?<!\\\\)\\*\\*([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*\\*");
-    static const QRegularExpression boldItalicExp ("(?<!\\\\)\\*{3}([^*]|(?:(?<=\\\\)\\*))+(?<!\\\\|\\s)\\*{3}");
-
-    const QRegularExpression exp (boldExp.pattern() + "|" + italicExp.pattern() + "|" + boldItalicExp.pattern());
-
-    int index = 0;
-    while ((index = text.indexOf (exp, index, &expMatch)) > -1)
-    {
-        if (format (index) == mainFormat && format (index + expMatch.capturedLength() - 1) == mainFormat)
-        {
-            if (index == text.indexOf (boldItalicExp, index))
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-            }
-            else if (index == text.indexOf (boldExp, index, &boldcMatch) && boldcMatch.capturedLength() == expMatch.capturedLength())
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), boldFormat, whiteSpaceFormat);
-                /* also format italic bold strings */
-                QString str = text.mid (index + 2, expMatch.capturedLength() - 4);
-                int indx = 0;
-                while ((indx = str.indexOf (italicExp, indx, &italicMatch)) > -1)
-                {
-                    setFormatWithoutOverwrite (index + 2 + indx, italicMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-                    indx += italicMatch.capturedLength();
-                }
-            }
-            else
-            {
-                setFormatWithoutOverwrite (index, expMatch.capturedLength(), italicFormat, whiteSpaceFormat);
-                /* also format bold italic strings */
-                QString str = text.mid (index + 1, expMatch.capturedLength() - 2);
-                int indx = 0;
-                while ((indx = str.indexOf (boldExp, indx, &boldcMatch)) > -1)
-                {
-                    setFormatWithoutOverwrite (index + 1 + indx, boldcMatch.capturedLength(), boldItalicFormat, whiteSpaceFormat);
-                    indx += boldcMatch.capturedLength();
-                }
-
-            }
-            index += expMatch.capturedLength();
-        }
-        else ++index;
-    }
-
-    /* format underlines */
-    static const QRegularExpression under ("(?<!\\\\)_([^_]|(?:(?<=\\\\)_))+(?<!\\\\|\\s)_");
-    index = 0;
-    while ((index = text.indexOf (under, index, &expMatch)) > -1)
-    {
-        QTextCharFormat fi = format (index);
-        if (fi == commentFormat || fi == altQuoteFormat)
-            ++index;
-        else
-        {
-            int count = expMatch.capturedLength();
-            fi = format (index + count - 1);
-            if (fi != commentFormat && fi != altQuoteFormat)
-            {
-                int start = index;
-                int indx;
-                while (start < index + count)
-                {
-                    fi = format (start);
-                    while (start < index + count
-                           && (fi == whiteSpaceFormat || fi == commentFormat || fi == altQuoteFormat))
-                    {
-                        ++ start;
-                        fi = format (start);
-                    }
-                    if (start < index + count)
-                    {
-                        indx = start;
-                        fi = format (indx);
-                        while (indx < index + count
-                               && fi != whiteSpaceFormat && fi != commentFormat && fi != altQuoteFormat)
-                        {
-                            fi.setFontUnderline (true);
-                            setFormat (indx, 1 , fi);
-                            ++ indx;
-                            fi = format (indx);
-                        }
-                        start = indx;
-                    }
-                }
-            }
-            index += count;
-        }
-    }
-}
-/*************************/
-void Highlighter::reSTMainFormatting (int start, const QString &text)
-{
-    if (start < 0) return;
-    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-    if (data == nullptr) return;
-
-    data->setHighlighted(); // completely highlighted
-    for (const HighlightingRule &rule : qAsConst (highlightingRules))
-    {
-        QTextCharFormat fi;
-        QRegularExpressionMatch match;
-        int index = text.indexOf (rule.pattern, start, &match);
-        if (rule.format != whiteSpaceFormat)
-        {
-            fi = format (index);
-            while (index >= 0 && fi != mainFormat)
-            {
-                index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                fi = format (index);
-            }
-        }
-        while (index >= 0)
-        {
-            /* get the overwritten format if existent */
-            QTextCharFormat prevFormat = format (index + match.capturedLength() - 1);
-
-            setFormat (index, match.capturedLength(), rule.format);
-            if (rule.pattern == QRegularExpression (":[\\w\\-+]+:`[^`]*`"))
-            { // format the reference start too
-                QTextCharFormat boldFormat = neutralFormat;
-                boldFormat.setFontWeight (QFont::Bold);
-                setFormat (index, text.indexOf (":`", index) - index + 1, boldFormat);
-            }
-            index += match.capturedLength();
-
-            if (rule.format != whiteSpaceFormat && prevFormat != mainFormat)
-            { // if a format is overwriiten by this rule, reformat from here
-                setFormat (index, text.length() - index, mainFormat);
-                reSTMainFormatting (index, text);
-                break;
-            }
-
-            index = text.indexOf (rule.pattern, index, &match);
-            if (rule.format != whiteSpaceFormat)
-            {
-                fi = format (index);
-                while (index >= 0 && fi != mainFormat)
-                {
-                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                    fi = format (index);
-                }
-            }
-        }
-    }
-}
-/*************************/
-void Highlighter::debControlFormatting (const QString &text)
-{
-    if (text.isEmpty()) return;
-    bool formatFurther (false);
-    QRegularExpressionMatch expMatch;
-    QRegularExpression exp;
-    int indx = 0;
-    QTextCharFormat debFormat;
-    if (text.indexOf (QRegularExpression ("^[^\\s:]+:(?=\\s*)")) == 0)
-    {
-        formatFurther = true;
-        exp.setPattern ("^[^\\s:]+(?=:)");
-        if (text.indexOf (exp, 0, &expMatch) == 0)
-        {
-            /* before ":" */
-            debFormat.setFontWeight (QFont::Bold);
-            debFormat.setForeground (DarkBlue);
-            setFormat (0, expMatch.capturedLength(), debFormat);
-
-            /* ":" */
-            debFormat.setForeground (DarkMagenta);
-            indx = text.indexOf (":");
-            setFormat (indx, 1, debFormat);
-            indx ++;
-
-            if (indx < text.count())
-            {
-                /* after ":" */
-                debFormat.setFontWeight (QFont::Normal);
-                debFormat.setForeground (DarkGreenAlt);
-                setFormat (indx, text.count() - indx , debFormat);
-            }
-        }
-    }
-    else if (text.indexOf (QRegularExpression ("^\\s+")) == 0)
-    {
-        formatFurther = true;
-        debFormat.setForeground (DarkGreenAlt);
-        setFormat (0, text.count(), debFormat);
-    }
-
-    if (formatFurther)
-    {
-        /* parentheses and brackets */
-        exp.setPattern ("\\([^\\(\\)\\[\\]]+\\)|\\[[^\\(\\)\\[\\]]+\\]");
-        int index = indx;
-        debFormat = neutralFormat;
-        debFormat.setFontItalic (true);
-        while ((index = text.indexOf (exp, index, &expMatch)) > -1)
-        {
-            int ml = expMatch.capturedLength();
-            setFormat (index, ml, neutralFormat);
-            if (ml > 2)
-            {
-                setFormat (index + 1, ml - 2 , debFormat);
-
-                QRegularExpression rel ("<|>|\\=|~");
-                int i = index;
-                while ((i = text.indexOf (rel, i)) > -1 && i < index + ml - 1)
-                {
-                    QTextCharFormat relFormat;
-                    relFormat.setForeground (DarkMagenta);
-                    setFormat (i, 1, relFormat);
-                    ++i;
-                }
-            }
-            index = index + ml;
-        }
-
-        /* non-commented URLs */
-        debFormat.setForeground (DarkGreenAlt);
-        debFormat.setFontUnderline (true);
-        QRegularExpressionMatch urlMatch;
-        while ((indx = text.indexOf (urlPattern, indx, &urlMatch)) > -1)
-        {
-            setFormat (indx, urlMatch.capturedLength(), debFormat);
-            indx += urlMatch.capturedLength();
-        }
-    }
-}
-/*************************/
-// Check whether the start bracket/brace is escaped. FIXME: This only covers keys and values.
-static inline bool isYamlBraceEscaped (const QString &text, const QRegularExpression &start, int pos)
-{
-    if (pos < 0 || text.indexOf (start, pos) != pos)
-        return false;
-    int indx = text.lastIndexOf (QRegularExpression ("(^|{|,|\\[)?[^:#]*:\\s+\\K"), pos); // the last key
-    if (indx > -1)
-    {
-        QString txt = text.right (text.size() - indx);
-        if (txt.indexOf (QRegularExpression ("^[^{\\[#\\s]")) > -1) // inside value
-            return true;
-    }
-    QRegularExpressionMatch match;
-    indx = text.lastIndexOf (QRegularExpression ("[^:#\\s{\\[]+\\s*" + start.pattern() + "[^:#]*:\\s+"), pos, &match);
-    if (indx > -1 && indx < pos && indx + match.capturedLength() > pos) // inside key
-        return true;
-    return false;
-}
-
-// Process open braces or brackets, apply the neutral format appropriately
-// and return a boolean that shows whether the next line should be updated.
-// Single-line comments should have already been highlighted.
-bool Highlighter::yamlOpenBraces (const QString &text,
-                                  const QRegularExpression &startExp, const QRegularExpression &endExp,
-                                  int oldOpenNests, bool oldProperty, // old info on the current line
-                                  bool setData) // whether data should be set
-{
-    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-    if (!data) return false;
-
-    int openNests = 0;
-    bool property = startExp.pattern() == "{" ? false : true;
-
-    if (setData)
-    {
-        QTextBlock prevBlock = currentBlock().previous();
-        if (prevBlock.isValid())
-        {
-            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            {
-                if (prevData->getProperty() == property)
-                    openNests = prevData->openNests();
-            }
-        }
-    }
-
-    QRegularExpression mixed (startExp.pattern() + "|" + endExp.pattern());
-    int indx = -1, startIndx = 0;
-    int txtL = text.length();
-    QRegularExpressionMatch match;
-    while (indx < txtL)
-    {
-        indx = text.indexOf (mixed, indx + 1, &match);
-        while (isYamlBraceEscaped (text, startExp, indx) || isQuoted (text, indx))
-            indx = text.indexOf (mixed, indx + match.capturedLength(), &match);
-        if (format (indx) == commentFormat)
-        {
-            while (format (indx - 1) == commentFormat) --indx;
-            if (indx > startIndx && openNests > 0)
-                setFormat (startIndx, indx - startIndx, neutralFormat);
-            break;
-        }
-        if (indx > -1)
-        {
-            if (text.indexOf (startExp, indx) == indx)
-            {
-                if (openNests == 0)
-                    startIndx = indx;
-                ++ openNests;
-            }
-            else
-            {
-                -- openNests;
-                if (openNests == 0)
-                    setFormat (startIndx, indx + match.capturedLength() - startIndx, neutralFormat);
-                openNests = qMax (openNests, 0);
-            }
-        }
-        else
-        {
-            if (openNests > 0)
-            {
-                indx = txtL;
-                while (format (indx - 1) == commentFormat) --indx;
-                if (indx > startIndx)
-                    setFormat (startIndx, indx - startIndx, neutralFormat);
-            }
-            break;
-        }
-    }
-
-    if (setData)
-    {
-        data->insertNestInfo (openNests);
-        if (openNests == 0) // braces take priority over brackets
-            property = false;
-        data->setProperty (property);
-        return (openNests != oldOpenNests || property != oldProperty);
-    }
-    return false; // don't update the next line if no data is set
-}
-/*************************/
-void Highlighter::yamlLiteralBlock (const QString &text)
-{
-    /* each line of a literal block contains the info on the block's indentation
-       as a whitespace string prefixed by "i" */
-    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-    if (data == nullptr) return; // impossible
-    QString oldIndent;
-    QTextBlock prevBlock = currentBlock().previous();
-    if (prevBlock.isValid())
-    {
-        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-        {
-            oldIndent = prevData->labelInfo();
-            if (!oldIndent.startsWith ("i"))
-                oldIndent = QString();
-        }
-    }
-
-    QRegularExpressionMatch match;
-    if (previousBlockState() == codeBlockState) // the literal block may continue
-    {
-        text.indexOf (QRegularExpression ("^\\s*"), 0, &match);
-        QString startingSpaces = "i" + match.captured();
-        if (text == match.captured() // only whitespaces...
-            /* ... or the indentation is wider than that of the literal block */
-            || (startingSpaces != oldIndent
-                && (oldIndent.isEmpty() || startingSpaces.startsWith (oldIndent))))
-        {
-            setFormat (0, text.length(), codeBlockFormat);
-            setCurrentBlockState (codeBlockState);
-            data->insertInfo (oldIndent);
-            return;
-        }
-    }
-
-    static const QRegularExpression blockStartExp ("^[^#]*\\s+\\K(\\||>)-?\\s*$");
-    int index = text.indexOf (blockStartExp, 0, &match);
-    if (index >= 0)
-    {
-        setCurrentBlockState (codeBlockState);
-        setFormat (index, text.length() - index, codeBlockFormat);
-        text.indexOf (QRegularExpression ("^\\s*"), 0, &match);
-        data->insertInfo ("i" + match.captured());
-    }
-}
-/*************************/
-// Completely commented lines are considered blank.
-// It's also supposed that spaces don't affect blankness.
-bool Highlighter::isFountainLineBlank (const QTextBlock &block)
-{
-    if (!block.isValid()) return false;
-    QString text = block.text();
-    if (block.previous().isValid())
-    {
-        if (block.previous().userState() == markdownBlockQuoteState)
-            return false;
-        if (block.previous().userState() == commentState)
-        {
-            int indx = text.indexOf (commentEndExpression);
-            if (indx == -1 || indx == text.length() - 2)
-                return true;
-            text = text.right (text.length() - indx - 2);
-        }
-    }
-    int index = 0;
-    while (index < text.length())
-    {
-        while (index < text.length() && text.at (index).isSpace())
-            ++ index;
-        if (index == text.length()) break; // only spaces
-        text = text.right (text.length() - index);
-        if (!text.startsWith ("/*")) return false;
-        index = 2;
-
-        index = text.indexOf (commentEndExpression, index);
-        if (index == -1) break;
-        index += 2;
-    }
-    return true;
-}
-/*************************/
-static inline bool isUpperCase (const QString & text)
-{ // this isn't the same as QSting::isUpper()
-    bool res = true;
-    for (int i = 0; i < text.length(); ++i)
-    {
-        const QChar thisChar = text.at (i);
-        if (thisChar.isLetter() && !thisChar.isUpper())
-        {
-            res = false;
-            break;
-        }
-    }
-    return res;
-}
-
-void Highlighter::highlightFountainBlock (const QString &text)
-{
-    bool rehighlightPrevBlock = false;
-
-    TextBlockData *data = new TextBlockData;
-    setCurrentBlockUserData (data);
-    setCurrentBlockState (0);
-
-    QTextCharFormat fi;
-
-    static const QRegularExpression leftNoteBracket ("\\[\\[");
-    static const QRegularExpression rightNoteBracket ("\\]\\]");
-    static const QRegularExpression heading ("^\\s*(INT|EXT|EST|INT./EXT|INT/EXT|I/E|int|ext|est|int./ext|int/ext|i/e|\\.\\w)");
-    static const QRegularExpression charRegex ("^\\s*@");
-    static const QRegularExpression parenRegex ("^\\s*\\(.*\\)$");
-    static const QRegularExpression lyricRegex ("^\\s*~");
-
-    /* notes */
-    multiLineComment (text, 0, leftNoteBracket, QRegularExpression ("^ ?$|\\]\\]"), markdownBlockQuoteState, altQuoteFormat);
-    /* boneyards (like a multi-line comment -- skips altQuoteFormat in notes with commentStartExpression) */
-    multiLineComment (text, 0, commentStartExpression, commentEndExpression, commentState, commentFormat);
-
-    QTextBlock prevBlock = currentBlock().previous();
-    QTextBlock nxtBlock = currentBlock().next();
-    if (isFountainLineBlank (currentBlock()))
-    {
-        if (currentBlockState() != commentState)
-            setCurrentBlockState (updateState); // to distinguish it
-        if (prevBlock.isValid()
-            && previousBlockState() != commentState && previousBlockState() != markdownBlockQuoteState
-            && (isUpperCase (prevBlock.text()) || prevBlock.text().indexOf (charRegex) == 0
-                || text.indexOf (heading) == 0))
-        {
-            rehighlightPrevBlock = true;
-        }
-    }
-    else
-    {
-        if (prevBlock.isValid() && previousBlockState() != codeBlockState
-            && (isUpperCase (prevBlock.text()) || prevBlock.text().indexOf (charRegex) == 0
-                || text.indexOf (heading) == 0))
-        {
-            rehighlightPrevBlock = true;
-        }
-
-        QTextCharFormat fFormat;
-        /* scene headings (between blank lines) */
-        if (previousBlockState() == updateState && isFountainLineBlank (nxtBlock)
-            && text.indexOf (heading) == 0)
-        {
-            fFormat.setFontWeight (QFont::Bold);
-            fFormat.setForeground (Blue);
-            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
-        }
-        /* characters (following a blank line and not preceding one) */
-        else if (previousBlockState() == updateState
-                 && nxtBlock.isValid() && !isFountainLineBlank (nxtBlock)
-                 && (text.indexOf (charRegex) == 0 || isUpperCase (text)))
-        {
-            fFormat.setFontWeight (QFont::Bold);
-            fFormat.setForeground (DarkBlue);
-            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
-            if (currentBlockState() != commentState && currentBlockState() != markdownBlockQuoteState)
-                setCurrentBlockState (codeBlockState); // to distinguish it
-        }
-        /* transitions (between blank lines) */
-        else if (previousBlockState() == updateState && isFountainLineBlank (nxtBlock)
-                 && ((text.indexOf (QRegularExpression ("^\\s*>")) == 0
-                      && text.indexOf (QRegularExpression ("<$")) == -1) // not centered
-                     || (isUpperCase (text) && text.endsWith ("TO:"))))
-        {
-            fFormat.setFontWeight (QFont::Bold);
-            fFormat.setForeground (DarkMagenta);
-            fFormat.setFontItalic (true);
-            setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
-        }
-        else
-        {
-            if (previousBlockState() == codeBlockState
-                && currentBlockState() != commentState  && currentBlockState() != markdownBlockQuoteState)
-            {
-                setCurrentBlockState (codeBlockState); // to distinguish it for parentheticals
-            }
-            /* parentheticals (following characters or dialogs) */
-            if (text.indexOf (parenRegex) == 0 && previousBlockState() == codeBlockState)
-            {
-                fFormat.setFontWeight (QFont::Bold);
-                fFormat.setForeground (DarkGreen);
-                setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
-            }
-            /* lyrics */
-            else if (text.indexOf (lyricRegex) == 0)
-            {
-                fFormat.setFontItalic (true);
-                fFormat.setForeground (DarkMagenta);
-                setFormatWithoutOverwrite (0, text.length(), fFormat, commentFormat);
-            }
-        }
-    }
-
-    int index;
-
-    /* main formatting */
-    int bn = currentBlock().blockNumber();
-    if (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber())
-    {
-        data->setHighlighted();
-        for (const HighlightingRule &rule : qAsConst (highlightingRules))
-        {
-            if (rule.format == commentFormat)
-                continue;
-            QRegularExpressionMatch match;
-            index = text.indexOf (rule.pattern, 0, &match);
-            if (rule.format != whiteSpaceFormat)
-            {
-                fi = format (index);
-                while (index >= 0 && fi != mainFormat)
-                {
-                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                    fi = format (index);
-                }
-            }
-            while (index >= 0)
-            {
-                int length = match.capturedLength();
-                setFormat (index, length, rule.format);
-                index = text.indexOf (rule.pattern, index + length, &match);
-
-                if (rule.format != whiteSpaceFormat)
-                {
-                    fi = format (index);
-                    while (index >= 0 && fi != mainFormat)
-                    {
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                        fi = format (index);
-                    }
-                }
-            }
-        }
-        fountainFonts (text);
-    }
-
-    /* left parenthesis */
-    index = text.indexOf ('(');
-    fi = format (index);
-    while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
-    {
-        index = text.indexOf ('(', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        ParenthesisInfo *info = new ParenthesisInfo;
-        info->character = '(';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf ('(', index + 1);
-        fi = format (index);
-        while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
-        {
-            index = text.indexOf ('(', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* right parenthesis */
-    index = text.indexOf (')');
-    fi = format (index);
-    while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
-    {
-        index = text.indexOf (')', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        ParenthesisInfo *info = new ParenthesisInfo;
-        info->character = ')';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf (')', index +1);
-        fi = format (index);
-        while (index >= 0 && (fi == altQuoteFormat || fi == commentFormat))
-        {
-            index = text.indexOf (')', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* left bracket */
-    index = text.indexOf (leftNoteBracket);
-    fi = format (index);
-    while (index >= 0 && fi != altQuoteFormat)
-    {
-        index = text.indexOf (leftNoteBracket, index + 2);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BracketInfo *info = new BracketInfo;
-        info->character = '[';
-        info->position = index;
-        data->insertInfo (info);
-
-        info = new BracketInfo;
-        info->character = '[';
-        info->position = index + 1;
-        data->insertInfo (info);
-
-        index = text.indexOf (leftNoteBracket, index + 2);
-        fi = format (index);
-        while (index >= 0 && fi != altQuoteFormat)
-        {
-            index = text.indexOf (leftNoteBracket, index + 2);
-            fi = format (index);
-        }
-    }
-
-    /* right bracket */
-    index = text.indexOf (rightNoteBracket);
-    fi = format (index);
-    while (index >= 0 && fi != altQuoteFormat)
-    {
-        index = text.indexOf (rightNoteBracket, index + 2);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BracketInfo *info = new BracketInfo;
-        info->character = ']';
-        info->position = index;
-        data->insertInfo (info);
-
-        info = new BracketInfo;
-        info->character = ']';
-        info->position = index + 1;
-        data->insertInfo (info);
-
-        index = text.indexOf (rightNoteBracket, index + 2);
-        fi = format (index);
-        while (index >= 0 && fi != altQuoteFormat)
-        {
-            index = text.indexOf (rightNoteBracket, index + 2);
-            fi = format (index);
-        }
-    }
-
-    setCurrentBlockUserData (data);
-
-    if (rehighlightPrevBlock)
-    {
-        QTextBlock prevBlock = currentBlock().previous();
-        if (prevBlock.isValid())
-            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, prevBlock));
-    }
-}
-/*************************/
-void Highlighter::latexFormula (const QString &text)
-{
-    int index = 0;
-    QString exp;
-    TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData());
-    static const QRegularExpression latexFormulaStart ("\\${2}|\\$|\\\\\\(|\\\\\\[");
-    QRegularExpressionMatch startMatch;
-    QRegularExpression endExp;
-    QRegularExpressionMatch endMatch;
-
-    QTextBlock prevBlock = currentBlock().previous();
-    if (prevBlock.isValid())
-    {
-        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            exp = prevData->labelInfo();
-    }
-
-    if (exp.isEmpty())
-    {
-        index = text.indexOf (latexFormulaStart, index, &startMatch);
-        while (isEscapedChar (text, index))
-            index = text.indexOf (latexFormulaStart, index + 1, &startMatch);
-        /* skip single-line comments */
-        if (format (index) == commentFormat || format (index) == urlFormat)
-            index = -1;
-    }
-
-    while (index >= 0)
-    {
-        int badIndex = -1;
-        int endIndex;
-
-        if (!exp.isEmpty() && index == 0)
-        {
-            endExp.setPattern (exp);
-            endIndex = text.indexOf (endExp, 0, &endMatch);
-        }
-        else
-        {
-            if (startMatch.capturedLength() == 1)
-                endExp.setPattern ("\\$");
-            else
-            {
-                if (text.at (index + 1) == '$')
-                    endExp.setPattern ("\\${2}");
-                else if (text.at (index + 1) == '(')
-                    endExp.setPattern ("\\\\\\)");
-                else
-                    endExp.setPattern ("\\\\\\]");
-            }
-            endIndex = text.indexOf (endExp,
-                                     index + startMatch.capturedLength(),
-                                     &endMatch);
-        }
-
-        while (isEscapedChar (text, endIndex))
-            endIndex = text.indexOf (endExp, endIndex + 1, &endMatch);
-
-        /* if the formula ends ... */
-        if (endIndex >= 0)
-        {
-            /* ... clear the comment format from there to reformat later
-               because "%" may be inside a formula now */
-            badIndex = endIndex + endMatch.capturedLength();
-            for (int i = badIndex; i < text.length(); ++i)
-            {
-                if (format (i) == commentFormat || format (i) == urlFormat)
-                    setFormat (i, 1, neutralFormat);
-            }
-        }
-
-        int formulaLength;
-        if (endIndex == -1)
-        {
-            if (data)
-                data->insertInfo (endExp.pattern());
-            formulaLength = text.length() - index;
-        }
-        else
-            formulaLength = endIndex - index
-                            + endMatch.capturedLength();
-
-        setFormat (index, formulaLength, codeBlockFormat);
-
-        /* reformat the single-line comment from here if the format was cleared before */
-        if (badIndex >= 0)
-        {
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            {
-                if (rule.format == commentFormat)
-                {
-                    int INDX = text.indexOf (rule.pattern, badIndex);
-                    if (INDX >= 0)
-                        setFormat (INDX, text.length() - INDX, commentFormat);
-                    /* URLs and notes were cleared too */
-                    QString str = text.mid (INDX, text.length() - INDX);
-                    int pIndex = 0;
-                    QRegularExpressionMatch urlMatch;
-                    while ((pIndex = str.indexOf (urlPattern, pIndex, &urlMatch)) > -1)
-                    {
-                        setFormat (pIndex + INDX, urlMatch.capturedLength(), urlFormat);
-                        pIndex += urlMatch.capturedLength();
-                    }
-                    pIndex = 0;
-                    while ((pIndex = str.indexOf (notePattern, pIndex, &urlMatch)) > -1)
-                    {
-                        if (format (pIndex + INDX) != urlFormat)
-                            setFormat (pIndex + INDX, urlMatch.capturedLength(), noteFormat);
-                        pIndex += urlMatch.capturedLength();
-                    }
-                    break;
-                }
-            }
-        }
-
-        index = text.indexOf (latexFormulaStart, index + formulaLength, &startMatch);
-        while (isEscapedChar (text, index))
-            index = text.indexOf (latexFormulaStart, index + 1, &startMatch);
-        if (format (index) == commentFormat || format (index) == urlFormat)
-            index = -1;
-    }
-}
-/*************************/
-// Start syntax highlighting!
-void Highlighter::highlightBlock (const QString &text)
-{
-    if (progLan.isEmpty()) return;
-
-    int txtL = text.length();
-    if (txtL <= 10000)
-    {
-        /* If the paragraph separators are shown, the unformatted text
-           will be grayed out. So, we should restore its real color here.
-           This is also safe when the paragraph separators are hidden. */
-        setFormat (0, txtL, mainFormat);
-
-        if (progLan == "fountain")
-        {
-            highlightFountainBlock (text);
-            return;
-        }
-    }
-
-    bool rehighlightNextBlock = false;
-    int oldOpenNests = 0; QSet<int> oldOpenQuotes; // to be used in SH_CmndSubstVar() (and perl and css)
-    bool oldProperty = false; // to be used with yaml, markdown and perl
-    QString oldLabel; // to be used with yaml, perl and LaTeX
-    if (TextBlockData *oldData = static_cast<TextBlockData *>(currentBlockUserData()))
-    {
-        oldOpenNests = oldData->openNests();
-        oldOpenQuotes = oldData->openQuotes();
-        oldProperty = oldData->getProperty();
-        oldLabel = oldData->labelInfo();
-    }
-
-    int index;
-    TextBlockData *data = new TextBlockData;
-    data->setLastState (currentBlockState()); // remember the last state (which may not be -1)
-    setCurrentBlockUserData (data); // to be fed in later
-    setCurrentBlockState (0); // start highlightng, with 0 as the neutral state
-
-    /* set a limit on line length */
-    if (txtL > 10000)
-    {
-        setFormat (0, txtL, translucentFormat);
-        data->setHighlighted(); // completely highlighted
-        return;
-    }
-
-    /********************
-     * "Here" Documents *
-     ********************/
-
-    if (progLan == "sh" || progLan == "makefile" || progLan == "cmake"
-        || progLan == "perl" || progLan == "ruby")
-    {
-        /* first, handle "__DATA__" in perl */
-        if (progLan == "perl")
-        {
-            QRegularExpressionMatch match;
-            if (previousBlockState() == updateState // only used below to distinguish "__DATA__"
-                || (previousBlockState() <= 0
-                    && text.indexOf (QRegularExpression("^\\s*__(DATA|END)__"), 0, &match) == 0))
-            {
-                if (match.capturedLength() > 0)
-                {
-                    QTextCharFormat dataFormat = neutralFormat;
-                    dataFormat.setFontWeight (QFont::Bold);
-                    setFormat (0, match.capturedLength(), dataFormat);
-                }
-                for (const HighlightingRule &rule : qAsConst (highlightingRules))
-                {
-                    if (rule.format == whiteSpaceFormat)
-                    {
-                        index = text.indexOf (rule.pattern, 0, &match);
-                        while (index >= 0)
-                        {
-                            setFormat (index, match.capturedLength(), rule.format);
-                            index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                        }
-                        break;
-                    }
-                }
-                setCurrentBlockState (updateState); // completely highlighted
-                data->setHighlighted();
-                return;
-            }
-        }
-        if (isHereDocument (text))
-        {
-            data->setHighlighted(); // completely highlighted
-            /* transfer the info on open quotes inside code blocks downwards */
-            if (data->openNests() > 0)
-            {
-                QTextBlock nextBlock = currentBlock().next();
-                if (nextBlock.isValid())
-                {
-                    if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
-                    {
-                        if (nextData->openQuotes() != data->openQuotes()
-                            || (nextBlock.userState() >= 0 && nextBlock.userState() < endState)) // end delimiter
-                        {
-                            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
-                        }
-                    }
-                }
-            }
-            return;
-        }
-    }
-    /* just for debian control file */
-    else if (progLan == "deb")
-        debControlFormatting (text);
-
-    int bn = currentBlock().blockNumber();
-    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
-    QTextCharFormat fi;
-
-    /************************
-     * Single-Line Comments *
-     ************************/
-
-    if (progLan != "html")
-        singleLineComment (text, 0);
-
-    /* this is only for setting the format of
-       command substitution variables in bash */
-    rehighlightNextBlock |= SH_CmndSubstVar (text, data, oldOpenNests, oldOpenQuotes);
-
-    /*******************
-     * Python Comments *
-     *******************/
-
-    pythonMLComment (text, 0);
-
-    /*******************************
-     * XML Quotations and Comments *
-     *******************************/
-    if (progLan == "xml")
-    {
-        /* value is handled as a kind of comment */
-        multiLineComment (text, 0, xmlGt, xmlLt, xmlValueState, neutralFormat);
-        /* multiline quotes as signs of errors in the xml doc */
-        xmlQuotes (text);
-    }
-    /******************
-     * LaTeX Formulae *
-     ******************/
-    else if (progLan == "LaTeX")
-    {
-        latexFormula (text);
-        if (data->labelInfo() != oldLabel)
-            rehighlightNextBlock = true;
-    }
-    /*****************************************
-     * (Multiline) Quotations as well as CSS *
-     *****************************************/
-    else if (progLan == "sh") // bash has its own method
-        SH_MultiLineQuote (text);
-    else if (progLan == "css")
-    { // quotes and urls are highlighted by cssHighlighter() inside CSS values
-        cssHighlighter (text, mainFormatting);
-        rehighlightNextBlock |= (data->openNests() != oldOpenNests);
-    }
-    else if (progLan != "diff" && progLan != "log"
-             && progLan != "desktop" && progLan != "config" && progLan != "theme"
-             && progLan != "changelog" && progLan != "url"
-             && progLan != "srt" && progLan != "html"
-             && progLan != "deb" && progLan != "m3u"
-             && progLan != "reST" && progLan != "troff"
-             && progLan != "yaml") // yaml will be formated separately
-    {
-        rehighlightNextBlock |= multiLineQuote (text);
-    }
-
-    /**********************
-     * Multiline Comments *
-     **********************/
-
-    if (!commentStartExpression.pattern().isEmpty() && progLan != "python")
-        multiLineComment (text, 0, commentStartExpression, commentEndExpression, commentState, commentFormat);
-
-    /* only javascript, qml and perl */
-    multiLineRegex (text, 0);
-    if (progLan == "perl" && currentBlockState() == data->lastState())
-        rehighlightNextBlock |= (data->labelInfo() != oldLabel || data->getProperty() != oldProperty
-                                 || data->openNests() != oldOpenNests);
-
-    /********
-     * Yaml *
-     ********/
-
-    if (progLan == "yaml")
-    {
-        bool isCodeBlock = previousBlockState() == codeBlockState;
-        bool braces (true);
-        int openNests = 0;
-        QTextBlock prevBlock = currentBlock().previous();
-        if (prevBlock.isValid())
-        {
-            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            {
-                openNests = prevData->openNests();
-                if (openNests != 0) // braces take priority over brackets
-                    braces = !prevData->getProperty();
-
-                if (isCodeBlock)
-                {
-                    QString spaces = prevData->labelInfo();
-                    if (!spaces.startsWith ("i"))
-                        spaces = QString();
-                    else
-                        spaces.remove (0, 1);
-                    isCodeBlock = text.startsWith (spaces + " ");
-                }
-            }
-        }
-        if (text.indexOf (QRegularExpression("^---")) == 0) // pass the data
-        {
-            data->insertNestInfo (openNests);
-            data->setProperty (braces);
-            rehighlightNextBlock |= oldOpenNests != openNests;
-        }
-        else // format braces and brackets before formatting multi-line quotes
-        {
-            if (!isCodeBlock)
-            {
-                if (braces)
-                {
-                    rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("{"), QRegularExpression ("}"), oldOpenNests, oldProperty, true);
-                    rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("\\["), QRegularExpression ("\\]"), oldOpenNests, oldProperty,
-                                                            data->openNests() == 0); // set data only if braces are completely closed
-                }
-                else
-                {
-                    rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("\\["), QRegularExpression ("\\]"), oldOpenNests, oldProperty, true);
-                    rehighlightNextBlock |= yamlOpenBraces (text, QRegularExpression ("{"), QRegularExpression ("}"), oldOpenNests, oldProperty,
-                                                            data->openNests() == 0); // set data only if brackets are completely closed
-                }
-            }
-            else
-            {
-                data->insertNestInfo (0);
-                data->setProperty (false);
-            }
-            if (data->openNests() == 0)
-            {
-                yamlLiteralBlock (text);
-                QString newIndent = data->labelInfo();
-                rehighlightNextBlock |= (!oldLabel.isEmpty() && !newIndent.isEmpty() && oldLabel != newIndent);
-            }
-
-            rehighlightNextBlock |= multiLineQuote (text);
-        }
-
-        /* yaml Main Formatting */
-        if (mainFormatting)
-        {
-            data->setHighlighted();
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            {
-                if (rule.format != whiteSpaceFormat
-                    && format (0) == codeBlockFormat) // a literal block
-                {
-                    continue;
-                }
-                if (rule.format == commentFormat)
-                    continue;
-
-                QRegularExpressionMatch match;
-                index = text.indexOf (rule.pattern, 0, &match);
-                if (rule.format != whiteSpaceFormat)
-                {
-                    fi = format (index);
-                    while (index >= 0
-                           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                               || fi == commentFormat || fi == urlFormat
-                               || fi == noteFormat)) // because of Yaml keys (as in "# TODO:...")
-                    {
-                        index = text.indexOf (rule.pattern, index + 1, &match);
-                        fi = format (index);
-                    }
-                }
-                while (index >= 0)
-                {
-                    int length = match.capturedLength();
-
-                    /* check if there is a valid brace inside the regex
-                       and if there is, limit the found match to it */
-                    QString txt = text.mid (index, length);
-                    int braceIndx = 0;
-                    while ((braceIndx = txt.indexOf (QRegularExpression ("{"), braceIndx)) >= 0)
-                    {
-                        if (format (index + braceIndx) == neutralFormat
-                            && !isYamlBraceEscaped (text, QRegularExpression ("{"), index + braceIndx))
-                        {
-                            txt = text.mid (index, braceIndx);
-                            break;
-                        }
-                        ++ braceIndx;
-                    }
-                    braceIndx = 0;
-                    while ((braceIndx = txt.indexOf (QRegularExpression ("}"), braceIndx)) >= 0)
-                    {
-                        if (format (index + braceIndx) == neutralFormat)
-                        {
-                            txt = text.mid (index, braceIndx);
-                            break;
-                        }
-                        ++ braceIndx;
-                    }
-                    braceIndx = 0;
-                    while ((braceIndx = txt.indexOf (QRegularExpression ("\\["), braceIndx)) >= 0)
-                    {
-                        if (format (index + braceIndx) == neutralFormat
-                            && !isYamlBraceEscaped (text, QRegularExpression ("\\["), index + braceIndx))
-                        {
-                            txt = text.mid (index, braceIndx);
-                            break;
-                        }
-                        ++ braceIndx;
-                    }
-                    braceIndx = 0;
-                    while ((braceIndx = txt.indexOf (QRegularExpression ("\\]"), braceIndx)) >= 0)
-                    {
-                        if (format (index + braceIndx) == neutralFormat)
-                        {
-                            txt = text.mid (index, braceIndx);
-                            break;
-                        }
-                        ++ braceIndx;
-                    }
-                    braceIndx = 0;
-                    while ((braceIndx = txt.indexOf (QRegularExpression (","), braceIndx)) >= 0)
-                    {
-                        if (format (index + braceIndx) == neutralFormat)
-                        {
-                            txt = text.mid (index, braceIndx);
-                            break;
-                        }
-                        ++ braceIndx;
-                    }
-                    length = txt.length();
-
-                    if (length > 0)
-                    {
-                        fi = rule.format;
-                        if (fi.foreground() == Violet)
-                        {
-                            if (txt.indexOf (QRegularExpression ("([-+]?(\\d*\\.?\\d+|\\d+\\.?\\d*)((e|E)(\\+|-)?\\d+)?|0[xX][0-9a-fA-F]+)\\s*(?=(#|$))"), 0, &match) == 0)
-                            { // format numerical values differently
-                                if (match.capturedLength() == length)
-                                    fi.setForeground (Brown);
-                            }
-                            else if (txt.indexOf (QRegularExpression ("(true|false|yes|no|TRUE|FALSE|YES|NO|True|False|Yes|No)\\s*(?=(#|$))"), 0, &match) == 0)
-                            { // format booleans differently
-                                if (match.capturedLength() == length)
-                                {
-                                    fi.setForeground (DarkBlue);
-                                    fi.setFontWeight (QFont::Bold);
-                                }
-                            }
-                        }
-                        setFormat (index, length, fi);
-                    }
-                    index = text.indexOf (rule.pattern, index + qMax (length, 1), &match);
-
-                    if (rule.format != whiteSpaceFormat)
-                    {
-                        fi = format (index);
-                        while (index >= 0
-                               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                                   || fi == commentFormat || fi == urlFormat || fi == noteFormat))
-                        {
-                            index = text.indexOf (rule.pattern, index + 1, &match);
-                            fi = format (index);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /************
-     * Markdown *
-     ************/
-
-    else if (progLan == "markdown")
-    {
-        if (blockQuoteFormat.isValid() && codeBlockFormat.isValid())
-        {
-            int prevState = previousBlockState();
-            QTextBlock prevBlock = currentBlock().previous();
-            bool prevProperty = false;
-            QString prevLabel;
-            if (prevBlock.isValid())
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                {
-                    prevProperty = prevData->getProperty();
-                    prevLabel = prevData->labelInfo();
-                }
-            }
-            int extraBlockIndentation = prevLabel.length();
-            /* determine whether this line is inside a list */
-            if (!prevLabel.isEmpty())
-            {
-                if (prevBlock.text().indexOf (QRegularExpression ("\\S")) > -1)
-                    data->insertInfo (prevLabel);
-                else
-                {
-                    QRegularExpressionMatch spacesMatch;
-                    text.indexOf (QRegularExpression ("^\\s+"), 0, &spacesMatch);
-                    if (spacesMatch.capturedLength() == text.length()
-                        || spacesMatch.capturedLength() >= prevLabel.length())
-                    {
-                        data->insertInfo (prevLabel);
-                    }
-                }
-            }
-
-            /* a block quote shouldn't be formatted inside a real comment */
-            if (prevState != commentState)
-            {
-                markdownMultiLine (text, QString(),
-                                   QRegularExpression (QStringLiteral ("^\\s{0,")
-                                                       + QString::number (3 + extraBlockIndentation)
-                                                       + QStringLiteral ("}>.*")),
-                                   QRegularExpression ("^$"),
-                                   markdownBlockQuoteState, blockQuoteFormat);
-            }
-            /* the ``` code block shouldn't be formatted inside a comment or block quote */
-            if (prevState != commentState && prevState != markdownBlockQuoteState)
-            {
-                static const QRegularExpression codeStartRegex ("^ {0,3}\\K(`{3,}(?!`)|~{3,}(?!~))");
-                rehighlightNextBlock |= markdownMultiLine (text, oldLabel,
-                                                           codeStartRegex,
-                                                           QRegularExpression(),
-                                                           codeBlockState, codeBlockFormat);
-            }
-
-            if (currentBlockState() != markdownBlockQuoteState && currentBlockState() != codeBlockState)
-            {
-                QRegularExpressionMatch match;
-
-                /* list start */
-                QTextCharFormat markdownFormat;
-                markdownFormat.setFontWeight (QFont::Bold);
-                markdownFormat.setForeground (DarkBlue);
-                QRegularExpression listRegex (QStringLiteral ("^ {0,")
-                                              + QString::number (3 + extraBlockIndentation)
-                                              + QStringLiteral ("}((\\*\\s+){1,}|(\\+\\s+){1,}|(\\-\\s+){1,}|\\d+\\.\\s+|\\d+\\)\\s+)"));
-                index = text.indexOf (listRegex, 0, &match);
-                fi = format (index);
-                while (index >= 0
-                       && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
-                           || fi == commentFormat || fi == urlFormat))
-                {
-                    index = text.indexOf (listRegex, index + match.capturedLength(), &match);
-                    fi = format (index);
-                }
-                if (index >= 0)
-                {
-                    QString spaces;
-                    for (int i = 0; i < match.capturedLength(); ++i)
-                        spaces += " ";
-                    data->insertInfo (spaces);
-                    setFormat (index, match.capturedLength(), markdownFormat);
-                }
-
-                /* code block with indentation */
-                static const QRegularExpression codeRegex ("^( {4,}|\\s*\\t+\\s*).*");
-                index = text.indexOf (codeRegex, 0, &match);
-                fi = format (index);
-                while (index >= 0
-                       && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
-                           || fi == commentFormat || fi == urlFormat))
-                {
-                    index = text.indexOf (codeRegex, index + match.capturedLength(), &match);
-                    fi = format (index);
-                }
-                if (index >= 0)
-                {
-                    /* when this is about a code block with indentation
-                       but the current line can't be code block */
-                    const QString prevTxt = prevBlock.text();
-                    if ((text.left (4 + extraBlockIndentation)).indexOf (QRegularExpression ("\\S")) > -1
-                        || (prevTxt.left (4 + prevLabel.length())).indexOf (QRegularExpression ("\\S")) > -1
-                        || (prevTxt.indexOf (QRegularExpression ("\\S")) > -1 && !prevProperty))
-                    {
-                        if (oldProperty)
-                            rehighlightNextBlock = true;
-                    }
-                    else
-                    {
-                        setFormat (index, match.capturedLength(), codeBlockFormat);
-                        data->setProperty (true);
-                        if (!oldProperty)
-                            rehighlightNextBlock = true;
-                    }
-                }
-            }
-
-            if (mainFormatting)
-            {
-                data->setHighlighted(); // completely highlighted
-                for (const HighlightingRule &rule : qAsConst (highlightingRules))
-                {
-                    QRegularExpressionMatch match;
-                    index = text.indexOf (rule.pattern, 0, &match);
-                    if (rule.format != whiteSpaceFormat)
-                    {
-                        if (currentBlockState() == markdownBlockQuoteState || currentBlockState() == codeBlockState)
-                            continue;
-                        fi = format (index);
-                        while (index >= 0
-                               && (fi == blockQuoteFormat || fi == codeBlockFormat // the same as quoteFormat (for `...`)
-                                   || fi == commentFormat || fi == urlFormat))
-                        {
-                            index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                            fi = format (index);
-                        }
-                    }
-
-                    while (index >= 0)
-                    {
-                        setFormat (index, match.capturedLength(), rule.format);
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                        if (rule.format != whiteSpaceFormat)
-                        {
-                            fi = format (index);
-                            while (index >= 0
-                                   && (fi == blockQuoteFormat || fi == codeBlockFormat
-                                       || fi == commentFormat || fi == urlFormat))
-                            {
-                                index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                                fi = format (index);
-                            }
-                        }
-                    }
-                }
-
-                markdownFonts (text);
-            }
-
-            /* if this line isn't a code block with indentation
-               but the next line was, rehighlight the next line */
-            if (!rehighlightNextBlock && !data->getProperty())
-            {
-                QTextBlock nextBlock = currentBlock().next();
-                if (nextBlock.isValid())
-                {
-                    if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
-                    {
-                        if (nextData->getProperty())
-                            rehighlightNextBlock = true;
-                    }
-                }
-            }
-            if (!rehighlightNextBlock)
-            {
-                if (data->labelInfo().length() != oldLabel.length())
-                    rehighlightNextBlock = true;
-                else if (!data->labelInfo().isEmpty())
-                {
-                    QTextBlock nextBlock = currentBlock().next();
-                    if (nextBlock.isValid())
-                    {
-                        if (TextBlockData *nextData = static_cast<TextBlockData *>(nextBlock.userData()))
-                        {
-                            if (nextData->labelInfo() != data->labelInfo())
-                                rehighlightNextBlock = true;
-                        }
-                    }
-                }
-            }
-        }
-        /* go to braces matching */
-    }
-
-    /********************
-     * reStructuredText *
-     ********************/
-
-    else if (progLan == "reST" && codeBlockFormat.isValid())
-    {
-        QRegularExpressionMatch match;
-
-        /*******************************
-        * reST Code and Comment Blocks *
-        ********************************/
-        QTextBlock prevBlock = currentBlock().previous();
-        static const QRegularExpression codeBlockStart1 ("^\\.{2} code-block::");
-        static const QRegularExpression codeBlockStart2 ("^(?!\\s*\\.{2}\\s+).*::$");
-        static const QRegularExpression restComment ("^\\s*\\.{2}"
-                                                     "(?!("
-                                                         /* not a label or substitution (".. _X:" or ".. |X| Y::") */
-                                                         " _[\\w\\s\\-+]*:(?!\\S)"
-                                                         "|"
-                                                         " \\|[\\w\\s]+\\|\\s+\\w+::(?!\\S)"
-                                                         "|"
-                                                         /* not a footnote (".. [#X]") */
-                                                         " (\\[(\\w|\\s|-|\\+|\\*)+\\]|\\[#(\\w|\\s|-|\\+)*\\])\\s+"
-                                                         "|"
-                                                         /* not ".. X::" */
-                                                         " (\\w|-)+::(?!\\S)"
-                                                     "))"
-                                                     "\\s+.*");
-        /* definitely, the start of a code block */
-        if (text.indexOf (codeBlockStart1, 0, &match) == 0)
-        { // also overwrites commentFormat
-            /* the ".. code-block::" part will be formatted later */
-            setFormat (match.capturedLength(), text.count() - match.capturedLength(), codeBlockFormat);
-            setCurrentBlockState (codeBlockState);
-        }
-        /* perhaps the start of a code block */
-        else if (text.indexOf (codeBlockStart2) == 0)
-        {
-            bool isCommented (false);
-            if (previousBlockState() >= endState || previousBlockState() < -1)
-            {
-                int spaces = text.indexOf (QRegularExpression ("\\S"));
-                if (spaces > 0)
-                {
-                    if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                    {
-                        QString prevLabel = prevData->labelInfo();
-                        if (prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
-                        { // not a code block start but a comment
-                            isCommented = true;
-                            setFormat (0, text.count(), commentFormat);
-                            setCurrentBlockState (previousBlockState());
-                            data->insertInfo (prevLabel);
-                        }
-                    }
-                }
-            }
-            /* definitely, the start of a code block */
-            if (!isCommented)
-            {
-                QTextCharFormat blockFormat = codeBlockFormat;
-                blockFormat.setFontWeight (QFont::Bold);
-                setFormat (text.count() - 2,  2, blockFormat);
-                setCurrentBlockState (codeBlockState);
-            }
-        }
-        /* perhaps a comment */
-        else if (text.indexOf (restComment) == 0)
-        {
-            bool isCodeLine (false);
-            QString prevLabel;
-            if (previousBlockState() == codeBlockState
-                || previousBlockState() >= endState || previousBlockState() < -1)
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                {
-                    prevLabel = prevData->labelInfo();
-                    if (prevLabel.isEmpty()
-                        || (!prevLabel.startsWith ("c") && text.startsWith (prevLabel)))
-                    { // not a commnt but a code line
-                        isCodeLine = true;
-                        if (prevLabel.isEmpty())
-                        { // the code block was started or kept in the previous line
-                            int spaces = text.indexOf (QRegularExpression ("\\S"));
-                            if (spaces == -1) // spaces only keep the code block
-                                setCurrentBlockState (codeBlockState);
-                            else
-                            { // a code line
-                                setFormat (0, text.count(), codeBlockFormat);
-                                if (spaces == 0) // a line without indent only keeps the code block
-                                    setCurrentBlockState (codeBlockState);
-                                else
-                                {
-                                    /* remember the starting spaces */
-                                    QString spaceStr = text.left (spaces);
-                                    data->insertInfo (spaceStr);
-                                    /* also, the state should depend on the starting spaces */
-                                    int n = static_cast<int>(qHash (spaceStr));
-                                    int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0));
-                                    setCurrentBlockState (state);
-                                }
-                            }
-                        }
-                        else
-                        {
-                            setFormat (0, text.count(), codeBlockFormat);
-                            setCurrentBlockState (previousBlockState());
-                            data->insertInfo (prevLabel);
-                        }
-                    }
-                }
-            }
-            /* definitely a comment */
-            if (!isCodeLine)
-            {
-                setFormat (0, text.count(), commentFormat);
-                if ((previousBlockState() >= endState || previousBlockState() < -1)
-                    && prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
-                {
-                    setCurrentBlockState (previousBlockState());
-                    data->insertInfo (prevLabel);
-                }
-                else
-                {
-                    /* remember the starting spaces (which consists of 3 spaces at least)
-                       but add a "c" to its beginning to distinguish it from a code block */
-                    QString spaceStr;
-                    int spaces = text.indexOf (QRegularExpression ("\\S"));
-                    if (spaces == -1)
-                        spaceStr = "c   ";
-                    else
-                        spaceStr = "c" + text.left (spaces) + "   ";
-                    data->insertInfo (spaceStr);
-                    /* also, the state should depend on the starting spaces */
-                    int n = static_cast<int>(qHash (spaceStr));
-                    int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0)); // always an even number but maybe negative
-                    setCurrentBlockState (state);
-                }
-            }
-        }
-        /* now, everything depends on the previous block */
-        else if (prevBlock.isValid())
-        {
-            if (previousBlockState() == codeBlockState)
-            { // the code block was started or kept in the previous line
-                int spaces = text.indexOf (QRegularExpression ("\\S"));
-                if (text.isEmpty() || spaces == -1) // spaces only keep the code block
-                    setCurrentBlockState (codeBlockState);
-                else
-                { // a code line
-                    setFormat (0, text.count(), codeBlockFormat);
-                    if (spaces == 0) // a line without indent only keeps the code block
-                        setCurrentBlockState (codeBlockState);
-                    else
-                    {
-                        /* remember the starting spaces */
-                        QString spaceStr = text.left (spaces);
-                        data->insertInfo (spaceStr);
-                        /* also, the state should depend on the starting spaces */
-                        int n = static_cast<int>(qHash (spaceStr));
-                        int state = 2 * (n + (n >= 0 ? endState/2 + 1 : 0));
-                        setCurrentBlockState (state);
-                    }
-                }
-            }
-            else if (previousBlockState() >= endState || previousBlockState() < -1)
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                {
-                    QString prevLabel = prevData->labelInfo();
-                    if (text.isEmpty()
-                        || ((prevLabel.startsWith ("c") && text.startsWith (prevLabel.right(prevLabel.count() - 1)))
-                            || text.startsWith (prevLabel)))
-                    {
-                        setCurrentBlockState (previousBlockState());
-                        data->insertInfo (prevLabel);
-                        if (prevLabel.startsWith ("c")) // a comment continues
-                            setFormat (0, text.count(), commentFormat);
-                        else
-                            setFormat (0, text.count(), codeBlockFormat);
-                    }
-                }
-            }
-        }
-        /***********************
-        * reST Main Formatting *
-        ************************/
-        if (mainFormatting)
-            reSTMainFormatting (0, text);
-    }
-
-    /*************
-     * HTML Only *
-     *************/
-
-    else if (progLan == "html")
-    {
-        htmlBrackets (text);
-        htmlCSSHighlighter (text);
-        htmlJavascript (text);
-        /* also consider quotes and URLs inside CSS values */
-        rehighlightNextBlock |= (data->openNests() != oldOpenNests);
-        /* go to braces matching */
-    }
-
-    /*******************
-     * Main Formatting *
-     *******************/
-
-    // we format html embedded javascript in htmlJavascript()
-    else if (mainFormatting)
-    {
-        data->setHighlighted(); // completely highlighted
-        for (const HighlightingRule &rule : qAsConst (highlightingRules))
-        {
-            /* single-line comments are already formatted */
-            if (rule.format == commentFormat)
-                continue;
-
-            QRegularExpressionMatch match;
-            index = text.indexOf (rule.pattern, 0, &match);
-            /* skip quotes and all comments */
-            if (rule.format != whiteSpaceFormat)
-            {
-                fi = format (index);
-                while (index >= 0
-                       && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                           || fi == commentFormat || fi == urlFormat
-                           || fi == regexFormat))
-                {
-                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                    fi = format (index);
-                }
-            }
-
-            while (index >= 0)
-            {
-                int length = match.capturedLength();
-                int l = length;
-                /* In c/c++, the neutral pattern after "#define" may contain
-                   a (double-)slash but it's always good to check whether a
-                   part of the match is inside an already formatted region. */
-                if (rule.format != whiteSpaceFormat)
-                {
-                    while (format (index + l - 1) == commentFormat
-                           /*|| format (index + l - 1) == commentFormat
-                           || format (index + l - 1) == urlFormat
-                           || format (index + l - 1) == quoteFormat
-                           || format (index + l - 1) == altQuoteFormat
-                           || format (index + l - 1) == urlInsideQuoteFormat
-                           || format (index + l - 1) == regexFormat*/)
-                    {
-                        -- l;
-                    }
-                }
-                setFormat (index, l, rule.format);
-                index = text.indexOf (rule.pattern, index + length, &match);
-
-                if (rule.format != whiteSpaceFormat)
-                {
-                    fi = format (index);
-                    while (index >= 0
-                           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                               || fi == commentFormat || fi == urlFormat
-                               || fi == regexFormat))
-                    {
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                        fi = format (index);
-                    }
-                }
-            }
-        }
-    }
-
-    /*********************************************
-     * Parentheses, Braces and brackets Matching *
-     *********************************************/
-
-    /* left parenthesis */
-    index = text.indexOf ('(');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "sh" && isEscapedChar (text, index))))
-    {
-        index = text.indexOf ('(', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        ParenthesisInfo *info = new ParenthesisInfo;
-        info->character = '(';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf ('(', index + 1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "sh" && isEscapedChar (text, index))))
-        {
-            index = text.indexOf ('(', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* right parenthesis */
-    index = text.indexOf (')');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "sh" && isEscapedChar (text, index))))
-    {
-        index = text.indexOf (')', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        ParenthesisInfo *info = new ParenthesisInfo;
-        info->character = ')';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf (')', index +1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "sh" && isEscapedChar (text, index))))
-        {
-            index = text.indexOf (')', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* left brace */
-    index = text.indexOf ('{');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "yaml" && fi != neutralFormat)))
-    {
-        index = text.indexOf ('{', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BraceInfo *info = new BraceInfo;
-        info->character = '{';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf ('{', index + 1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "yaml" && fi != neutralFormat)))
-        {
-            index = text.indexOf ('{', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* right brace */
-    index = text.indexOf ('}');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "yaml" && fi != neutralFormat)))
-    {
-        index = text.indexOf ('}', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BraceInfo *info = new BraceInfo;
-        info->character = '}';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf ('}', index +1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "yaml" && fi != neutralFormat)))
-        {
-            index = text.indexOf ('}', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* left bracket */
-    index = text.indexOf ('[');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "yaml" && fi != neutralFormat)
-               || (progLan == "sh" && isEscapedChar (text, index))))
-    {
-        index = text.indexOf ('[', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BracketInfo *info = new BracketInfo;
-        info->character = '[';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf ('[', index + 1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "yaml" && fi != neutralFormat)
-                   || (progLan == "sh" && isEscapedChar (text, index))))
-        {
-            index = text.indexOf ('[', index + 1);
-            fi = format (index);
-        }
-    }
-
-    /* right bracket */
-    index = text.indexOf (']');
-    fi = format (index);
-    while (index >= 0
-           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-               || fi == commentFormat || fi == urlFormat
-               || fi == regexFormat
-               || (progLan == "yaml" && fi != neutralFormat)
-               || (progLan == "sh" && isEscapedChar (text, index))))
-    {
-        index = text.indexOf (']', index + 1);
-        fi = format (index);
-    }
-    while (index >= 0)
-    {
-        BracketInfo *info = new BracketInfo;
-        info->character = ']';
-        info->position = index;
-        data->insertInfo (info);
-
-        index = text.indexOf (']', index +1);
-        fi = format (index);
-        while (index >= 0
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat
-                   || (progLan == "yaml" && fi != neutralFormat)
-                   || (progLan == "sh" && isEscapedChar (text, index))))
-        {
-            index = text.indexOf (']', index + 1);
-            fi = format (index);
-        }
-    }
-
-    setCurrentBlockUserData (data);
-
-    if (rehighlightNextBlock)
-    {
-        QTextBlock nextBlock = currentBlock().next();
-        if (nextBlock.isValid())
-            QMetaObject::invokeMethod (this, "rehighlightBlock", Qt::QueuedConnection, Q_ARG (QTextBlock, nextBlock));
-    }
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter-css.cpp featherpad-1.0.1/featherpad/highlighter-css.cpp
--- featherpad-0.17.1/featherpad/highlighter-css.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-css.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,728 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2020 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-/* NOTE: Comments can be everywhere, inside and outside CSS blocks/values,
-         but a start comment sign may be escaped by a quotation or URL inside
-         a CSS value. Therefore, to know whether a position is commented out,
-         we need to know whether it is inside a value or not and, for that,
-         we have to divide the text line to regions of CSS values. */
-
-static inline int getSectionStart (const int pos, const QList<int> &regions, bool *isInsideRegion)
-{
-    if (regions.isEmpty()
-        || regions.contains (pos)
-        || pos < regions.first())
-    {
-        *isInsideRegion = false;
-        return 0;
-    }
-    for (int i = 0; i < regions.size() - 1; ++i)
-    {
-        if (pos > regions.at (i) && pos < regions.at (i + 1))
-        {
-            *isInsideRegion = (i % 2 == 0);
-            return regions.at (i);
-        }
-    }
-    *isInsideRegion = (regions.size() % 2 != 0);
-    return regions.last();
-}
-
-bool Highlighter::isCSSCommented (const QString &text,
-                                  const QList<int> &valueRegions,
-                                  const int index,
-                                  int prevQuote,
-                                  bool prevUrl)
-{
-    if (index < 0)  return false;
-
-    bool insideValue;
-    int start = getSectionStart (index, valueRegions, &insideValue);
-
-    bool res = false;
-    int pos = - 1;
-    int N;
-    QRegularExpression commentExpression;
-    int prevState = previousBlockState();
-    if (start > 0
-        || (prevState != commentState
-            && prevState != commentInCssBlockState
-            && prevState != commentInCssValueState))
-    {
-        N = 0;
-        pos = start - 1;
-        commentExpression = commentStartExpression;
-    }
-    else
-    {
-        N = 1;
-        res = true;
-        commentExpression = commentEndExpression;
-    }
-
-    while ((pos = text.indexOf (commentExpression, pos + 1)) >= 0)
-    {
-        /* skip formatted quotations and URLs (in values) */
-        if (format (pos) == quoteFormat || format (pos) == altQuoteFormat)
-            continue;
-
-        ++N;
-        if (pos >= index)
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        if (N % 2 != 0) // a start comment...
-        {
-            /* ... inside an attribute selector... */
-            if ((!insideValue && isInsideAttrSelector (text, start, pos))
-                 /* ... or inside a quotation or URL */
-                 || (insideValue  // quotations and URLs exist only inside values
-                     && (isQuotedInCSSValue (text, start, pos, prevQuote, prevUrl) > 0
-                         || isInsideCSSValueUrl (text, start, pos, prevQuote, prevUrl))))
-            {
-                --N;
-                continue;
-            }
-
-            commentExpression = commentEndExpression;
-            res = true;
-        }
-        else
-        {
-            commentExpression = commentStartExpression;
-            res = false;
-        }
-    }
-
-    return res;
-}
-/*************************/
-// Also formats quotations.
-int Highlighter::isQuotedInCSSValue (const QString &text,
-                                     const int valueStart,
-                                     const int index,
-                                     int prevQuote,
-                                     bool prevUrl)
-{
-    if (index < 0 || valueStart < 0 || index < valueStart)
-        return 0;
-    //if (format (index) == quoteFormat)
-        //return ?;
-    if (format (index) == altQuoteFormat)
-        return 0;
-
-    int res; // 1 for single quote, 2 for double quote
-    int N;
-    QRegularExpression quoteExpression;
-    if (prevQuote > 0 && valueStart == 0)
-    {
-        if (prevQuote == 1)
-        {
-            res = 1;
-            quoteExpression.setPattern ("\'");
-        }
-        else
-        {
-            res = 2;
-            quoteExpression = quoteMark;
-        }
-        N = 1;
-    }
-    else
-    {
-        quoteExpression = mixedQuoteMark;
-        res = 0;
-        N = 0;
-    }
-    int pos = valueStart - 1;
-    int start = 0;
-    int nxtPos;
-    while ((nxtPos = text.indexOf (quoteExpression, pos + 1)) >= 0)
-    {
-        ++N;
-        if (nxtPos >= index)
-        {
-            if (N % 2 == 0)
-            {
-                if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                    res = 2;
-                else
-                    res = 1;
-                setFormat (start, nxtPos - start + 1, quoteFormat);
-            }
-            else res = 0;
-            break;
-        }
-
-        if (N % 2 != 0)
-        {
-            /* a start quote inside a comment or value URL */
-            if (isCSSCommented (text, QList<int>() << valueStart, nxtPos, prevQuote, prevUrl)
-                || isInsideCSSValueUrl (text, valueStart, nxtPos, prevQuote, prevUrl))
-            {
-                --N;
-                pos = nxtPos;
-                continue;
-            }
-
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                res = 2;
-            else
-                res = 1;
-            start = nxtPos;
-        }
-        else
-        {
-            res = 0;
-            setFormat (start, nxtPos - start + 1, quoteFormat);
-        }
-
-        /* determine the next quotation mark */
-        if (N % 2 != 0)
-        {
-            if (text.at (nxtPos) == quoteMark.pattern().at (0))
-                quoteExpression = quoteMark;
-            else
-                quoteExpression.setPattern ("\'");
-        }
-        else
-            quoteExpression = mixedQuoteMark;
-
-        pos = nxtPos;
-    }
-    if (nxtPos == -1 && N % 2 != 0)
-        setFormat (start, text.length() - start, quoteFormat);
-
-    return res;
-}
-/*************************/
-/* FIXME: This is temporary solution for url("...") and url('...')
-          and only works with whole URLs in a line. */
-static inline bool isWholeCSSdUrl (const QString &text, const int start, int &length)
-{
-    int indx = start + 4; // "url("
-    while (indx < start + length && text.at (indx).isSpace())
-        ++ indx;
-    if (indx < start + length)
-    {
-        if (text.at (indx) == '\'')
-        {
-            int end = text.indexOf ('\'', indx + 1);
-            if (end == -1) return false;
-            if (end >= start + length)
-            {
-                end = text.indexOf (')', end + 1);
-                if (end == -1) return false;
-                length = end - start + 1;
-            }
-        }
-        else if (text.at (indx) == '\"')
-        {
-            int end = text.indexOf ('\"', indx + 1);
-            if (end == -1) return false;
-            if (end >= start + length)
-            {
-                end = text.indexOf (')', end + 1);
-                if (end == -1) return false;
-                length = end - start + 1;
-            }
-        }
-    }
-    return true;
-}
-
-// Also formats URLs.
-bool Highlighter::isInsideCSSValueUrl (const QString &text,
-                                       const int valueStart,
-                                       const int index,
-                                       int prevQuote,
-                                       bool prevUrl)
-{
-    if (index < 0 || valueStart < 0 || index < valueStart)
-        return false;
-    if (format (index) == altQuoteFormat)
-        return true;
-    if (format (index) == quoteFormat)
-        return false;
-
-    int indx;
-    if (valueStart == 0 && prevUrl) // prevQuote is 0
-    {
-        /* format the first URL completely */
-        indx = text.indexOf (QRegularExpression ("\\)"));
-        int endIndx;
-        if (indx == -1) endIndx = text.length();
-        else endIndx = indx + 1;
-        setFormat (0, endIndx, altQuoteFormat);
-
-        if (indx == -1 || indx >= index)
-            return true;
-        return isInsideCSSValueUrl (text, indx + 1, index);
-    }
-
-    /* format whole URLs up to index */
-    QRegularExpressionMatch match;
-    static const QRegularExpression cssUrl ("\\burl\\([^\\)]*\\)");
-    int urlIndx = text.indexOf (cssUrl, valueStart, &match);
-    while (urlIndx < index
-           && (isCSSCommented (text, QList<int>() << valueStart, urlIndx, prevQuote, prevUrl)
-               || isQuotedInCSSValue (text, valueStart, urlIndx, prevQuote, prevUrl) > 0))
-    {
-        urlIndx = text.indexOf (cssUrl, urlIndx + 1, &match);
-    }
-    int L;
-    while (urlIndx > -1 && urlIndx < index)
-    {
-        L = match.capturedLength();
-        if (!isWholeCSSdUrl (text, urlIndx, L))
-        {
-            setFormat (urlIndx, text.length() - urlIndx, altQuoteFormat);
-            return true;
-        }
-        setFormat (urlIndx, L, altQuoteFormat);
-        if (urlIndx + L > index)
-            return true;
-        if (urlIndx + L == index)
-            return false;
-        urlIndx = text.indexOf (cssUrl, urlIndx + L, &match);
-        while (urlIndx < index
-               && (isCSSCommented (text, QList<int>() << valueStart, urlIndx, prevQuote, prevUrl)
-                   || isQuotedInCSSValue (text, valueStart, urlIndx, prevQuote, prevUrl) > 0))
-        {
-            urlIndx = text.indexOf (cssUrl, urlIndx + 1, &match);
-        }
-    }
-
-    static const QRegularExpression cssOpenUrl ("\\burl\\([^\\)]*$");
-    const QString txt = text.left (index);
-    indx = txt.indexOf (cssOpenUrl, valueStart);
-    while (isCSSCommented (text, QList<int>() << valueStart, indx, prevQuote, prevUrl)
-           || isQuotedInCSSValue (text, valueStart, indx, prevQuote, prevUrl) > 0)
-    {
-        indx = txt.indexOf (cssOpenUrl, indx + 1);
-    }
-    if (indx == -1) return false;
-
-    /* also, format this URL completely if it's open */
-    if (text.indexOf (')', indx) == -1)
-        setFormat (indx, text.length() - indx, altQuoteFormat);
-
-    return true;
-}
-/*************************/
-// This formats attribute selectors with "quoteFormat" to skip start
-// comment sings in multiLineComment().
-// It is supposed that the section between "start" and "pos" is
-// outside all values (because values can't contain attribute selectors).
-void Highlighter::formatAttrSelectors (const QString &text, const int start , const int pos)
-{
-    if (pos <= start) return;
-    static const QRegularExpression attrSelector ("\\[[^\\]]*(?=\\]|$)");
-    QRegularExpressionMatch match;
-    int indx = start;
-    while ((indx = text.indexOf (attrSelector, indx, &match)) > -1 && indx <= pos)
-    {
-        if (format (indx+1) == quoteFormat) // a precaution (shouldn't be needed)
-            return;
-        while (isCSSCommented (text, QList<int>() << start << start, indx))
-            indx = text.indexOf (attrSelector, indx + 1, &match);
-        if (indx == -1) break;
-        setFormat (indx + 1, match.capturedLength() - 1, quoteFormat);
-        indx += match.capturedLength();
-    }
-}
-/*************************/
-// Multi-line attribute selectors aren't considered.
-// It is supposed that the section between "start" and "pos" is
-// outside all values (because values can't contain attribute selectors).
-bool Highlighter::isInsideAttrSelector (const QString &text, const int start, const int pos)
-{
-    if (pos <= start) return false;
-    if (format (pos) == quoteFormat) return true;
-    static const QRegularExpression attrSelectorStart ("\\[[^\\]]*$");
-    int indx = text.left (pos).indexOf (attrSelectorStart, start);
-    if (indx > -1 && !isCSSCommented (text, QList<int>() << start << start, indx))
-        return true;
-    return false;
-}
-/*************************/
-// This should come before multiline comments highlighting.
-// It also highlights quotes and URLs inside CSS values.
-void Highlighter::cssHighlighter (const QString &text, bool mainFormatting, const int start)
-{
-    /* NOTE: Since we need to know whether the previous value had an open quote or an
-             open URL, we use the "OpenNests" variable to not add another one just for
-             this case. Although it isn't intended for such a case, it can be safely
-             used with values "1", "2" and "3" because it isn't used anywhere else
-             with CSS or HTML. The next block will be rehighlighted at highlightBlock()
-             (after "cssHighlighter (text, mainFormatting);") if it's changed. */
-
-    /**************************
-     * (Multiline) CSS Blocks *
-     **************************/
-
-    QRegularExpressionMatch cssStartMatch;
-    QRegularExpression cssStartExpression ("\\{");
-    QRegularExpressionMatch cssEndtMatch;
-    QRegularExpression cssEndExpression ("\\}");
-
-    static const QRegularExpression cssValueStartExp ("(?<!:):(?!:)");
-    static const QRegularExpression cssValueEndExp (";|\\}");
-
-    int blockStartIndex = start;
-    int blockEndIndex = start;
-
-    int valueStartIndex;
-    int valueEndIndex;
-
-    QList<int> valueRegions;
-
-    QTextCharFormat cssValueFormat;
-    cssValueFormat.setFontItalic (true);
-    cssValueFormat.setForeground (Verda);
-
-
-    int prevQuote = 0;
-    bool prevUrl = false;
-    QTextBlock prevBlock = currentBlock().previous();
-    if (prevBlock.isValid())
-    {
-        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-        {
-            if (prevData->openNests() == 1)
-                prevQuote = 1; // single quote
-            else if (prevData->openNests() == 2)
-                prevQuote = 2; // double quote
-            else if (prevData->openNests() == 3)
-                prevUrl = true;
-        }
-    }
-
-    int prevState = previousBlockState();
-    if (blockStartIndex > 0
-        || (prevState != cssBlockState
-            && prevState != cssValueState
-            && prevState != commentInCssBlockState
-            && prevState != commentInCssValueState))
-    {
-        blockStartIndex = text.indexOf (cssStartExpression, start, &cssStartMatch);
-        while (isCSSCommented (text, QList<int>() << start << start, blockStartIndex)
-               || isInsideAttrSelector (text, start, blockStartIndex))
-        {
-            blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + 1, &cssStartMatch);
-        }
-        if (blockStartIndex == -1)
-            formatAttrSelectors (text, start, text.length());
-    }
-
-    while (blockStartIndex >= 0)
-    {
-        formatAttrSelectors (text, blockEndIndex, blockStartIndex);
-
-        int realBlockStart;
-        /* when the css block starts in the previous line
-           and the search for its end has just begun... */
-        if ((prevState == cssBlockState
-             || prevState == cssValueState // subset of cssBlockState
-             || prevState == commentInCssBlockState
-             || prevState == commentInCssValueState)
-            && blockStartIndex == 0)
-        {
-            /* ... search for its end from the line start */
-            realBlockStart = 0;
-        }
-        else
-            realBlockStart = blockStartIndex + cssStartMatch.capturedLength();
-        blockEndIndex = text.indexOf (cssEndExpression, realBlockStart, &cssEndtMatch);
-
-        if (blockEndIndex == -1)
-        {
-            /* temporarily, to find value regions and format
-               their quotes and URLs in the following loop */
-            blockEndIndex = text.length();
-        }
-
-        /* see if the end brace should be skipped after
-           finding CSS value regions up to this point */
-        QList<int> regions;
-        valueStartIndex = realBlockStart;
-        QRegularExpressionMatch match;
-        if (realBlockStart > 0
-            || (valueStartIndex == 0
-                && prevState != cssValueState
-                && prevState != commentInCssValueState))
-        {
-            valueStartIndex = text.indexOf (cssValueStartExp, realBlockStart, &match);
-            while (isCSSCommented (text, QList<int>() << realBlockStart << realBlockStart, valueStartIndex)
-                   || isInsideAttrSelector (text, realBlockStart, valueStartIndex))
-            {
-                valueStartIndex = text.indexOf (cssValueStartExp, valueStartIndex + 1, &match);
-            }
-            if (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
-                formatAttrSelectors (text, realBlockStart, valueStartIndex);
-        }
-        while (blockEndIndex > -1)
-        {
-            while (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
-            {
-                /**************************
-                 * (Multiline) CSS Values *
-                 **************************/
-
-                valueStartIndex += match.capturedLength();
-                regions << valueStartIndex;
-                if (valueStartIndex == 0
-                    && (prevState == cssValueState
-                        || prevState == commentInCssValueState))
-                { // first loop
-                    valueEndIndex = text.indexOf (cssValueEndExp, 0, &cssEndtMatch);
-                    while (valueEndIndex > -1
-                           && (isCSSCommented (text, QList<int>() << 0, valueEndIndex, prevQuote, prevUrl)
-                               || isQuotedInCSSValue (text, 0, valueEndIndex, prevQuote, prevUrl) > 0
-                               || isInsideCSSValueUrl (text, 0, valueEndIndex, prevQuote, prevUrl)))
-                    {
-                        valueEndIndex = text.indexOf (cssValueEndExp, valueEndIndex + cssEndtMatch.capturedLength(), &cssEndtMatch);
-                    }
-                }
-                else
-                {
-                    valueEndIndex = text.indexOf (cssValueEndExp, valueStartIndex, &cssEndtMatch);
-                    while (valueEndIndex > -1
-                           && (isCSSCommented (text, QList<int>() << valueStartIndex, valueEndIndex)
-                               || isQuotedInCSSValue (text, valueStartIndex, valueEndIndex) > 0
-                               || isInsideCSSValueUrl (text, valueStartIndex, valueEndIndex)))
-                    {
-                        valueEndIndex = text.indexOf (cssValueEndExp, valueEndIndex + cssEndtMatch.capturedLength(), &cssEndtMatch);
-                    }
-                }
-
-                if (valueEndIndex > -1)
-                {
-                    regions << valueEndIndex;
-                    valueStartIndex = text.indexOf (cssValueStartExp, valueEndIndex + cssEndtMatch.capturedLength(), &match);
-                    while (isCSSCommented (text, QList<int>() << valueEndIndex << valueEndIndex, valueStartIndex)
-                           || isInsideAttrSelector (text, valueEndIndex, valueStartIndex))
-                    {
-                        valueStartIndex = text.indexOf (cssValueStartExp, valueStartIndex + 1, &match);
-                    }
-                    if (valueStartIndex > -1 && valueStartIndex <= blockEndIndex)
-                        formatAttrSelectors (text, valueEndIndex, valueStartIndex);
-                }
-                else
-                {
-                    int q = isQuotedInCSSValue (text, valueStartIndex, text.length(), prevQuote, prevUrl);
-                    if (q > 0)
-                    {
-                        if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                            data->insertNestInfo (q);
-                    }
-                    else if (isInsideCSSValueUrl (text, valueStartIndex, text.length(), prevQuote, prevUrl))
-                    {
-                        if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                            data->insertNestInfo (3);
-                    }
-                    valueStartIndex = -1; // exit the loop
-                }
-            }
-
-            if (blockEndIndex == text.length())
-            { // value regions are found and their quotes and URLs are formatted
-                blockEndIndex = -1;
-                break;
-            }
-            if (regions.size() % 2 != 0 // quoted or inside a URL
-                || (!regions.isEmpty() && (regions.last() > blockEndIndex + 1 // quoted or inside a URL
-                                           || isCSSCommented (text, regions, blockEndIndex, prevQuote, prevUrl
-                                           || isInsideAttrSelector (text, regions.last(), blockEndIndex))))
-                || (regions.isEmpty() && (isCSSCommented (text, QList<int>() << realBlockStart << realBlockStart, blockEndIndex)
-                                          || isInsideAttrSelector (text, realBlockStart, blockEndIndex))))
-            {
-                blockEndIndex = text.indexOf (cssEndExpression, blockEndIndex + 1, &cssEndtMatch);
-                if (blockEndIndex == -1 && valueStartIndex > -1)
-                    blockEndIndex = text.length();  // to find the remaining value regions and format their quotes and URLs
-            }
-            else break;
-        }
-
-        if (mainFormatting)
-            valueRegions << regions;
-
-        int cssLength;
-        if (blockEndIndex == -1)
-        {
-            blockEndIndex = text.length();
-            if (regions.size() % 2 != 0)
-                setCurrentBlockState (cssValueState);
-            else
-                setCurrentBlockState (cssBlockState);
-            cssLength = text.length() - blockStartIndex;
-        }
-        else
-        {
-            cssLength = blockEndIndex - blockStartIndex
-                        + cssEndtMatch.capturedLength();
-        }
-
-        if (regions.isEmpty())
-            formatAttrSelectors (text, realBlockStart, blockEndIndex);
-        else if (regions.size() % 2 == 0)
-            formatAttrSelectors (text, regions.last(), blockEndIndex);
-
-        /* at first, we suppose all syntax is wrong (but comment
-           start signs have "quoteFormat" inside attribute selectors) */
-        setFormatWithoutOverwrite (realBlockStart, blockEndIndex - realBlockStart, neutralFormat, quoteFormat);
-
-        if (mainFormatting)
-        {
-            /* css property format (before :...;) */
-            QTextCharFormat cssPropFormat;
-            cssPropFormat.setFontItalic (true);
-            cssPropFormat.setForeground (Blue);
-            static const QRegularExpression cssProp ("[A-Za-z0-9_\\-]+(?=\\s*(?<!:):(?!:))");
-            int indxTmp = text.indexOf (cssProp, realBlockStart, &match);
-            while (format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat)
-                indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
-            while (indxTmp >= 0 && indxTmp < blockEndIndex)
-            {
-                setFormat (indxTmp, match.capturedLength(), cssPropFormat);
-                indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
-                while (format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat)
-                    indxTmp = text.indexOf (cssProp, indxTmp + match.capturedLength(), &match);
-            }
-        }
-
-        blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + cssLength, &cssStartMatch);
-        while (isCSSCommented (text, QList<int>() << blockEndIndex << blockEndIndex, blockStartIndex)
-               || isInsideAttrSelector (text, blockEndIndex, blockStartIndex))
-        {
-            blockStartIndex = text.indexOf (cssStartExpression, blockStartIndex + 1, &cssStartMatch);
-        }
-
-        if (blockStartIndex == -1)
-            formatAttrSelectors (text, blockEndIndex, text.length());
-    }
-
-    /*******************
-     * Main Formatting *
-     *******************/
-
-    if (mainFormatting)
-    {
-        for (int i = 0; i < valueRegions.size(); ++i)
-        {
-            int cssLength;
-            if (i % 2 != 0)
-            {
-                valueStartIndex = valueRegions.at (i - 1);
-                cssLength = valueRegions.at (i) - valueRegions.at (i - 1);
-            }
-            else
-            {
-                if (i == valueRegions.size() - 1)
-                {
-                    valueStartIndex = valueRegions.at (i);
-                    cssLength = text.length() - valueRegions.at (i);
-                }
-                else continue;
-            }
-
-            /* css value format (skips altQuoteFormat too) */
-            setFormatWithoutOverwrite (valueStartIndex, cssLength, cssValueFormat, quoteFormat);
-
-            /* numbers in css values */
-            QTextCharFormat numFormat;
-            numFormat.setFontItalic (true);
-            numFormat.setForeground (Brown);
-            QRegularExpressionMatch numMatch;
-            QRegularExpression numExpression ("(-|\\+){0,1}\\b\\d*\\.{0,1}\\d+");
-            int nIndex = text.indexOf (numExpression, valueStartIndex, &numMatch);
-            while (format (nIndex) == quoteFormat || format (nIndex) == altQuoteFormat)
-                nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
-            while (nIndex > -1
-                   && nIndex + numMatch.capturedLength() <= valueStartIndex + cssLength)
-            {
-                setFormat (nIndex, numMatch.capturedLength(), numFormat);
-                nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
-                while (format (nIndex) == quoteFormat || format (nIndex) == altQuoteFormat)
-                    nIndex = text.indexOf (numExpression, nIndex + numMatch.capturedLength(), &numMatch);
-            }
-        }
-
-        /* color value format (#xyz, #abcdef, #abcdefxy) */
-        QTextCharFormat cssColorFormat;
-        cssColorFormat.setForeground (Verda);
-        cssColorFormat.setFontWeight (QFont::Bold);
-        cssColorFormat.setFontItalic (true);
-        QRegularExpressionMatch match;
-        // previously: "#\\b([A-Za-z0-9]{3}){0,4}(?![A-Za-z0-9_]+)"
-        static const QRegularExpression colorValue ("#([A-Fa-f0-9]{3}){1,2}(?![A-Za-z0-9_]+)|#([A-Fa-f0-9]{3}){2}[A-Fa-f0-9]{2}(?![A-Za-z0-9_]+)");
-        int indxTmp = text.indexOf (colorValue, start, &match);
-        while (format (indxTmp) == neutralFormat // an error
-               || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
-               || isCSSCommented (text, valueRegions, indxTmp))
-        {
-            indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
-        }
-        while (indxTmp >= 0)
-        {
-            setFormat (indxTmp, match.capturedLength(), cssColorFormat);
-            indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
-            while (format (indxTmp) == neutralFormat
-                   || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
-                   || isCSSCommented (text, valueRegions, indxTmp))
-            {
-                indxTmp = text.indexOf (colorValue, indxTmp + match.capturedLength(), &match);
-            }
-        }
-
-        /* definitions (starting with @) */
-        QTextCharFormat cssDefinitionFormat;
-        cssDefinitionFormat.setForeground (Brown);
-        static const  QRegularExpression cssDef ("(@[\\w-]+\\b)([^;]*(;|$))");
-        indxTmp = text.indexOf (cssDef, start, &match);
-        while (format (indxTmp) == neutralFormat // an error
-               || format (indxTmp) == cssValueFormat // inside a value
-               || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
-               || isCSSCommented (text, valueRegions, indxTmp))
-        {
-            indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength (1), &match);
-        }
-        while (indxTmp >= 0)
-        {
-            setFormat (indxTmp, match.capturedLength (1), cssDefinitionFormat);
-            indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength(), &match);
-            while (format (indxTmp) == neutralFormat
-                   || format (indxTmp) == cssValueFormat
-                   || format (indxTmp) == quoteFormat || format (indxTmp) == altQuoteFormat
-                   || isCSSCommented (text, valueRegions, indxTmp))
-            {
-                indxTmp = text.indexOf (cssDef, indxTmp + match.capturedLength (1), &match);
-            }
-        }
-    }
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter.h featherpad-1.0.1/featherpad/highlighter.h
--- featherpad-0.17.1/featherpad/highlighter.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,330 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#ifndef HIGHLIGHTER_H
-#define HIGHLIGHTER_H
-
-#include <QSyntaxHighlighter>
-#include <QRegularExpression>
-
-namespace FeatherPad {
-
-struct ParenthesisInfo
-{
-    char character; // '(' or ')'
-    int position;
-};
-
-struct BraceInfo
-{
-    char character; // '{' or '}'
-    int position;
-};
-
-struct BracketInfo
-{
-    char character; // '[' or ']'
-    int position;
-};
-
-
-/* This class gathers all the information needed for
-   highlighting the syntax of the current block. */
-class TextBlockData : public QTextBlockUserData
-{
-public:
-    TextBlockData() :
-        Highlighted (false),
-        Property (false),
-        LastState (0),
-        OpenNests (0),
-        LastFormattedQuote (0),
-        LastFormattedRegex (0) {}
-    ~TextBlockData();
-
-    QVector<ParenthesisInfo *> parentheses() const;
-    QVector<BraceInfo *> braces() const;
-    QVector<BracketInfo *> brackets() const;
-    QString labelInfo() const;
-    bool isHighlighted() const;
-    bool getProperty() const;
-    int lastState() const;
-    int openNests() const;
-    int lastFormattedQuote() const;
-    int lastFormattedRegex() const;
-    QSet<int> openQuotes() const;
-
-    void insertInfo (ParenthesisInfo *info);
-    void insertInfo (BraceInfo *info);
-    void insertInfo (BracketInfo *info);
-    void insertInfo (const QString &str);
-    void setHighlighted();
-    void setProperty (bool p);
-    void setLastState (int state);
-    void insertNestInfo (int nests);
-    void insertLastFormattedQuote (int last);
-    void insertLastFormattedRegex (int last);
-    void insertOpenQuotes (const QSet<int> &openQuotes);
-
-private:
-    QVector<ParenthesisInfo *> allParentheses;
-    QVector<BraceInfo *> allBraces;
-    QVector<BracketInfo *> allBrackets;
-    QString label; // A label (can be a delimiter string, like that of a here-doc).
-    bool Highlighted; // Is this block completely highlighted?
-    bool Property; // A general boolean property (used with SH, Perl and YAML).
-    int LastState; // The state of this block before it is highlighted (again).
-    /* "Nest" is a generalized bracket. This variable
-       is the number of unclosed nests in a block. */
-    int OpenNests;
-    /* "LastFormattedQuote" is used when quotes are formatted
-       on the fly, before they are completely formatted. */
-    int LastFormattedQuote;
-    int LastFormattedRegex;
-    QSet<int> OpenQuotes; // The numbers of open double quotes of open nests.
-};
-/*************************/
-/* This is a tricky but effective way for syntax highlighting. */
-class Highlighter : public QSyntaxHighlighter
-{
-    Q_OBJECT
-
-public:
-    Highlighter (QTextDocument *parent, const QString& lang,
-                 const QTextCursor &start, const QTextCursor &end,
-                 bool darkColorScheme,
-                 bool showWhiteSpace,
-                 bool showEndings,
-                 int whitespaceValue,
-                 const QHash<QString, QColor> &syntaxColors = QHash<QString, QColor>());
-    ~Highlighter();
-
-    void setLimit (const QTextCursor &start, const QTextCursor &end) {
-        startCursor = start;
-        endCursor = end;
-    }
-
-protected:
-    void highlightBlock (const QString &text);
-
-private:
-    QStringList keywords (const QString &lang);
-    QStringList types();
-    bool isEscapedChar (const QString &text, const int pos) const;
-    bool isEscapedQuote (const QString &text, const int pos, bool isStartQuote,
-                         bool skipCommandSign = false);
-    bool isQuoted (const QString &text, const int index,
-                   bool skipCommandSign = false);
-    bool isPerlQuoted (const QString &text, const int index);
-    bool isJSQuoted (const QString &text, const int index);
-    bool isMLCommented (const QString &text, const int index, int comState = commentState,
-                        const int start = 0);
-    bool isHereDocument (const QString &text);
-    void pythonMLComment (const QString &text, const int indx);
-    void htmlCSSHighlighter (const QString &text, const int start = 0);
-    void htmlBrackets (const QString &text, const int start = 0);
-    void htmlJavascript (const QString &text);
-    bool isCSSCommented (const QString &text,
-                         const QList<int> &valueRegions,
-                         const int index,
-                         int prevQuote = 0,
-                         bool prevUrl = false);
-    int isQuotedInCSSValue (const QString &text,
-                            const int valueStart,
-                            const int index,
-                            int prevQuote = 0,
-                            bool prevUrl = false);
-   bool isInsideCSSValueUrl (const QString &text,
-                             const int valueStart,
-                             const int index,
-                             int prevQuote = 0,
-                             bool prevUrl = false);
-   void formatAttrSelectors (const QString &text, const int start, const int pos);
-   bool isInsideAttrSelector (const QString &text, const int pos, const int start);
-    void cssHighlighter(const QString &text, bool mainFormatting, const int start = 0);
-    void singleLineComment (const QString &text, const int start);
-    void multiLineComment (const QString &text,
-                           const int index,
-                           const QRegularExpression &commentStartExp, const QRegularExpression &commentEndExp,
-                           const int commState,
-                           const QTextCharFormat &comFormat);
-    bool textEndsWithBackSlash (const QString &text);
-    bool multiLineQuote (const QString &text,
-                         const int start = 0,
-                         int comState = commentState);
-    void multiLinePerlQuote(const QString &text);
-    void multiLineJSlQuote (const QString &text, const int start, int comState);
-    void xmlQuotes (const QString &text);
-    void setFormatWithoutOverwrite (int start,
-                                    int count,
-                                    const QTextCharFormat &newFormat,
-                                    const QTextCharFormat &oldFormat);
-    /* SH specific methods: */
-    void SH_MultiLineQuote(const QString &text);
-    bool SH_SkipQuote (const QString &text, const int pos, bool isStartQuote);
-    int formatInsideCommand (const QString &text,
-                             const int minOpenNests, int &nests, QSet<int> &quotes,
-                             const bool isHereDocStart, const int index);
-    bool SH_CmndSubstVar (const QString &text,
-                          TextBlockData *currentBlockData,
-                          int oldOpenNests, const QSet<int> &oldOpenQuotes);
-
-    bool markdownMultiLine (const QString &text,
-                            const QString &oldStartPattern,
-                            const QRegularExpression &startExp, const QRegularExpression &endExp,
-                            const int state,
-                            const QTextCharFormat &txtFormat);
-    void markdownFonts (const QString &text);
-
-    void fountainFonts (const QString &text);
-    void reSTMainFormatting (int start, const QString &text);
-    void debControlFormatting (const QString &text);
-
-    bool isEscapedRegex (const QString &text, const int pos);
-    bool isEscapedPerlRegex (const QString &text, const int pos);
-    bool isEscapedRegexEndSign (const QString &text, const int start, const int pos,
-                                bool ignoreClasses = false) const;
-    bool isInsideRegex (const QString &text, const int index);
-    bool isInsidePerlRegex (const QString &text, const int index);
-    void multiLineRegex (const QString &text, const int index);
-    void multiLinePerlRegex (const QString &text);
-    int findDelimiter (const QString &text, const int index,
-                       const QRegularExpression &delimExp, int &capturedLength) const;
-
-    bool isYamlKeyQuote (const QString &key, const int pos);
-    bool yamlOpenBraces (const QString &text,
-                         const QRegularExpression &startExp, const QRegularExpression &endExp,
-                         int oldOpenNests, bool oldProperty,
-                         bool setData);
-    void yamlLiteralBlock (const QString &text);
-
-    bool isFountainLineBlank (const QTextBlock &block);
-    void highlightFountainBlock (const QString &text);
-
-    void latexFormula (const QString &text);
-
-    struct HighlightingRule
-    {
-        QRegularExpression pattern;
-        QTextCharFormat format;
-    };
-    QVector<HighlightingRule> highlightingRules;
-
-    QRegularExpression hereDocDelimiter;
-
-    /* Multiline comments: */
-    QRegularExpression commentStartExpression;
-    QRegularExpression commentEndExpression;
-
-    QRegularExpression htmlCommetStart, htmlCommetEnd;
-    QRegularExpression htmlSubcommetStart, htmlSubcommetEnd; // For CSS and JS inside HTML
-
-    QTextCharFormat mainFormat; // The format before highlighting.
-    QTextCharFormat neutralFormat; // When a color near that of mainFormat is needed.
-    QTextCharFormat commentFormat;
-    QTextCharFormat noteFormat;
-    QTextCharFormat quoteFormat; // Usually for double quote.
-    QTextCharFormat altQuoteFormat; // Usually for single quote.
-    QTextCharFormat urlInsideQuoteFormat;
-    QTextCharFormat urlFormat;
-    QTextCharFormat blockQuoteFormat;
-    QTextCharFormat codeBlockFormat;
-    QTextCharFormat whiteSpaceFormat; // For whitespaces.
-    QTextCharFormat translucentFormat;
-    QTextCharFormat regexFormat;
-
-    /* Programming language: */
-    QString progLan;
-
-    QRegularExpression quoteMark, mixedQuoteMark, mixedQuoteBackquote;
-    QRegularExpression xmlLt, xmlGt;
-    QColor Blue, DarkBlue, Red, DarkRed, Verda, DarkGreen, DarkGreenAlt, Magenta, DarkMagenta, Violet, Brown, DarkYellow;
-
-    /* The start and end cursors of the visible text: */
-    QTextCursor startCursor, endCursor;
-
-    static const QRegularExpression urlPattern;
-    static const QRegularExpression notePattern;
-
-    /* Block states: */
-    enum
-    {
-        commentState = 1,
-
-        /* Next-line commnets (ending back-slash in c/c++): */
-        nextLineCommentState,
-
-        /* Quotation marks: */
-        doubleQuoteState,
-        singleQuoteState,
-
-        SH_DoubleQuoteState,
-        SH_SingleQuoteState,
-        SH_MixedDoubleQuoteState,
-        SH_MixedSingleQuoteState,
-
-        /* Python comments: */
-        pyDoubleQuoteState,
-        pySingleQuoteState,
-
-        xmlValueState,
-
-        /* Markdown: */
-        markdownBlockQuoteState,
-
-        /* Markdown and reStructuredText */
-        codeBlockState,
-
-        /* JavaScript template literals */
-        JS_templateLiteralState,
-
-        /* Regex inside JavaScript, QML and Perl: */
-        regexSearchState, // search and replace (only in Perl)
-        regexState,
-        regexExtraState, /* JS: The line ends with a JS regex (+ spaces); or
-                            Perl: A Perl quoting operator isn't complete. */
-
-        /* HTML: */
-        htmlBracketState,
-        htmlStyleState,
-        htmlStyleDoubleQuoteState,
-        htmlStyleSingleQuoteState,
-        htmlCSSState,
-        htmlCSSCommentState,
-        htmlJavaState,
-        htmlJavaCommentState,
-
-        /* CSS: */
-        cssBlockState,
-        commentInCssBlockState,
-        commentInCssValueState,
-        cssValueState,
-
-        /* Used to update the format of the next line (as in JavaScript): */
-        updateState,
-
-        endState // 30
-
-        /* For here-docs, state >= endState or state < -1. */
-    };
-};
-
-}
-
-#endif // HIGHLIGHTER_H
diff -Nru featherpad-0.17.1/featherpad/highlighter-html.cpp featherpad-1.0.1/featherpad/highlighter-html.cpp
--- featherpad-0.17.1/featherpad/highlighter-html.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-html.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,728 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-// This should be called before "htmlCSSHighlighter()" and "htmlJavascript()".
-void Highlighter::htmlBrackets (const QString &text, const int start)
-{
-    if (progLan != "html") return;
-
-    /*****************************
-     * (Multiline) HTML Brackets *
-     *****************************/
-
-    int braIndex = start;
-    int indx = 0;
-    QRegularExpressionMatch startMatch;
-    static const QRegularExpression braStartExp ("<(?!\\!)/{0,1}[A-Za-z0-9_\\-]+");
-    QRegularExpressionMatch endMatch;
-    static const QRegularExpression braEndExp (">");
-    static const QRegularExpression styleExp ("<(style|STYLE)$|<(style|STYLE)\\s+[^>]*");
-    bool isStyle (false);
-    QTextCharFormat htmlBraFormat;
-    htmlBraFormat.setFontWeight (QFont::Bold);
-    htmlBraFormat.setForeground (Violet);
-
-    int prevState = previousBlockState();
-    if (braIndex > 0
-        || (prevState != singleQuoteState && prevState != doubleQuoteState
-            && (prevState < htmlBracketState || prevState > htmlStyleSingleQuoteState)))
-    {
-        braIndex = text.indexOf (braStartExp, start, &startMatch);
-        while (format (braIndex) == commentFormat || format (braIndex) == urlFormat)
-            braIndex = text.indexOf (braStartExp, braIndex + 1, &startMatch);
-        if (braIndex > -1)
-        {
-            indx = text.indexOf (styleExp, start);
-            while (format (indx) == commentFormat || format (indx) == urlFormat)
-                indx = text.indexOf (styleExp, indx + 1);
-            isStyle = indx > -1 && braIndex == indx;
-        }
-    }
-    else if (braIndex == 0 && (prevState == htmlStyleState
-                               /* these quote states are set only with styles */
-                               || prevState == htmlStyleSingleQuoteState
-                               || prevState == htmlStyleDoubleQuoteState))
-    {
-        isStyle = true;
-    }
-
-    int bn = currentBlock().blockNumber();
-    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
-    //bool hugeText (text.length() > 50000);
-    int firstBraIndex = braIndex; // to check progress in the following loop
-    while (braIndex >= 0)
-    {
-        /*if (hugeText)
-        {
-            setFormat (braIndex, text.length() - braIndex, translucentFormat);
-            break;
-        }*/
-        int braEndIndex;
-
-        int matched = 0;
-        if (braIndex == 0
-            && (prevState == singleQuoteState || prevState == doubleQuoteState
-                || (prevState >= htmlBracketState && prevState <= htmlStyleSingleQuoteState)))
-        {
-            braEndIndex = text.indexOf (braEndExp, 0, &endMatch);
-        }
-        else
-        {
-            matched = startMatch.capturedLength();
-            braEndIndex = text.indexOf (braEndExp,
-                                        braIndex + matched,
-                                        &endMatch);
-        }
-
-        int len;
-        if (braEndIndex == -1)
-        {
-            len = text.length() - braIndex;
-            if (isStyle)
-                setCurrentBlockState (htmlStyleState);
-            else
-                setCurrentBlockState (htmlBracketState);
-        }
-        else
-        {
-            len = braEndIndex - braIndex
-                  + endMatch.capturedLength();
-        }
-
-        if (matched > 0)
-            setFormat (braIndex, matched, htmlBraFormat);
-        if (braEndIndex > -1)
-            setFormat (braEndIndex, endMatch.capturedLength(), htmlBraFormat);
-
-
-        int endLimit;
-        if (braEndIndex == -1)
-            endLimit = text.length();
-        else
-            endLimit = braEndIndex;
-
-        /***************************
-         * (Multiline) HTML Quotes *
-         ***************************/
-
-        int quoteIndex = braIndex;
-        QRegularExpressionMatch quoteMatch;
-        QRegularExpression quoteExpression = mixedQuoteMark;
-        int quote = doubleQuoteState;
-
-        /* find the start quote */
-        if (braIndex > firstBraIndex // when we're in another bracket
-            || (prevState != doubleQuoteState
-                && prevState != singleQuoteState
-                && prevState != htmlStyleSingleQuoteState
-                && prevState != htmlStyleDoubleQuoteState))
-        {
-            quoteIndex = text.indexOf (quoteExpression, braIndex);
-
-            /* if the start quote is found... */
-            if (quoteIndex >= braIndex && quoteIndex <= endLimit)
-            {
-                /* ... distinguish between double and single quotes */
-                if (text.at (quoteIndex) == quoteMark.pattern().at (0))
-                {
-                    quoteExpression = quoteMark;
-                    quote = currentBlockState() == htmlStyleState ? htmlStyleDoubleQuoteState
-                                                                  : doubleQuoteState;
-                }
-                else
-                {
-                    quoteExpression.setPattern ("\'");
-                    quote = currentBlockState() == htmlStyleState ? htmlStyleSingleQuoteState
-                                                                  : singleQuoteState;
-                }
-            }
-        }
-        else // but if we're inside a quotation...
-        {
-            /* ... distinguish between the two quote kinds
-               by checking the previous line */
-            quote = prevState;
-            if (quote == doubleQuoteState || quote == htmlStyleDoubleQuoteState)
-                quoteExpression = quoteMark;
-            else
-                quoteExpression.setPattern ("\'");
-        }
-
-        while (quoteIndex >= braIndex && quoteIndex <= endLimit)
-        {
-            /* if the search is continued... */
-            if (quoteExpression == mixedQuoteMark)
-            {
-                /* ... distinguish between double and single quotes
-                   again because the quote mark may have changed */
-                if (text.at (quoteIndex) == quoteMark.pattern().at (0))
-                {
-                    quoteExpression = quoteMark;
-                    quote = currentBlockState() == htmlStyleState ? htmlStyleDoubleQuoteState
-                                                                  : doubleQuoteState;
-                }
-                else
-                {
-                    quoteExpression.setPattern ("\'");
-                    quote = currentBlockState() == htmlStyleState ? htmlStyleSingleQuoteState
-                                                                  : singleQuoteState;
-                }
-            }
-
-            int quoteEndIndex = text.indexOf (quoteExpression, quoteIndex + 1, &quoteMatch);
-            if (quoteIndex == braIndex
-                && (prevState == doubleQuoteState
-                    || prevState == singleQuoteState
-                    || prevState == htmlStyleSingleQuoteState
-                    || prevState == htmlStyleDoubleQuoteState))
-            {
-                quoteEndIndex = text.indexOf (quoteExpression, braIndex, &quoteMatch);
-            }
-
-            int Matched = 0;
-            if (quoteEndIndex == -1)
-            {
-                if (braEndIndex > -1) quoteEndIndex = braEndIndex;
-            }
-            else
-            {
-                if (quoteEndIndex > endLimit)
-                    quoteEndIndex = endLimit;
-                else
-                    Matched = quoteMatch.capturedLength();
-            }
-
-            int quoteLength;
-            if (quoteEndIndex == -1)
-            {
-                if (currentBlockState() == htmlBracketState
-                    || currentBlockState() == htmlStyleState)
-                {
-                    setCurrentBlockState (quote);
-                }
-                quoteLength = text.length() - quoteIndex;
-            }
-            else
-                quoteLength = quoteEndIndex - quoteIndex
-                              + Matched;
-            setFormat (quoteIndex, quoteLength, quoteExpression == quoteMark ? quoteFormat
-                                                                             : altQuoteFormat);
-
-            /* the next quote may be different */
-            quoteExpression = mixedQuoteMark;
-            quoteIndex = text.indexOf (quoteExpression, quoteIndex + quoteLength);
-        }
-
-        /*******************************
-         * (Multiline) HTML Attributes *
-         *******************************/
-
-        if (mainFormatting)
-        {
-            QTextCharFormat htmlAttributeFormat;
-            htmlAttributeFormat.setFontItalic (true);
-            htmlAttributeFormat.setForeground (Brown);
-            QRegularExpressionMatch attMatch;
-            static const QRegularExpression attExp ("[A-Za-z0-9_\\-]+(?=\\s*\\=)");
-            int attIndex = text.indexOf (attExp, braIndex, &attMatch);
-            QTextCharFormat fi = format (attIndex);
-            while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-            {
-                attIndex += attMatch.capturedLength();
-                fi = format (attIndex);
-                while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-                {
-                    ++ attIndex;
-                    fi = format (attIndex);
-                }
-                attIndex = text.indexOf (attExp, attIndex, &attMatch);
-                fi = format (attIndex);
-            }
-            while (attIndex >= braIndex && attIndex < endLimit)
-            {
-                setFormat (attIndex, attMatch.capturedLength(), htmlAttributeFormat);
-                attIndex = text.indexOf(attExp, attIndex + attMatch.capturedLength(), &attMatch);
-                fi = format (attIndex);
-                while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-                {
-                    attIndex += attMatch.capturedLength();
-                    fi = format (attIndex);
-                    while (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-                    {
-                        ++ attIndex;
-                        fi = format (attIndex);
-                    }
-                    attIndex = text.indexOf (attExp, attIndex, &attMatch);
-                    fi = format (attIndex);
-                }
-            }
-        }
-
-        indx = braIndex + len;
-        braIndex = text.indexOf (braStartExp, braIndex + len, &startMatch);
-        while (format (braIndex) == commentFormat || format (braIndex) == urlFormat)
-            braIndex = text.indexOf (braStartExp, braIndex + 1, &startMatch);
-        if (braIndex > -1)
-        {
-            indx = text.indexOf (styleExp, indx);
-            while (format (indx) == commentFormat || format (indx) == urlFormat)
-                indx = text.indexOf (styleExp, indx + 1);
-            isStyle = indx > -1 && braIndex == indx;
-        }
-        else isStyle = false;
-    }
-
-    /* at last, format whitespaces */
-    if (mainFormatting)
-    {
-        static_cast<TextBlockData *>(currentBlock().userData())->setHighlighted(); // completely highlighted
-        for (const HighlightingRule &rule : qAsConst (highlightingRules))
-        {
-            if (rule.format == whiteSpaceFormat)
-            {
-                QRegularExpressionMatch match;
-                int index = text.indexOf (rule.pattern, start, &match);
-                while (index >= 0)
-                {
-                    setFormat (index, match.capturedLength(), rule.format);
-                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                }
-
-                /* also, mark encoded and unencoded ampersands */
-                QRegularExpression ampersand ("&");
-                QTextCharFormat errorFormat;
-                errorFormat.setFontUnderline (true);
-                errorFormat.setForeground (Red);
-                QTextCharFormat encodedFormat;
-                encodedFormat.setForeground (DarkMagenta);
-                encodedFormat.setFontItalic (true);
-                QTextCharFormat specialFormat = encodedFormat;
-                specialFormat.setFontWeight (QFont::Bold);
-
-                index = text.indexOf (ampersand, start);
-                while (index >= 0 && format (index) != mainFormat)
-                    index = text.indexOf (ampersand, index + 1);
-                while (index >= 0)
-                {
-                    QString str = text.mid (index, 6);
-                    if (str == " ")
-                    {
-                        setFormat (index, 6, specialFormat);
-                        index = text.indexOf (ampersand, index + 6);
-                    }
-                    else if (str.startsWith("&"))
-                    {
-                        setFormat (index, 5, specialFormat);
-                        index = text.indexOf (ampersand, index + 5);
-                    }
-                    else if (str.startsWith ("<") || str.startsWith (">"))
-                    {
-                        setFormat (index, 4, specialFormat);
-                        index = text.indexOf (ampersand, index + 4);
-                    }
-                    else
-                    {
-                        str = text.mid (index);
-                        if (str.indexOf(QRegularExpression("^&(#[0-9]+|[a-zA-Z]+[a-zA-Z0-9_:\\.\\-]*|#[xX][0-9a-fA-F]+);"), 0, &match) > -1)
-                        { // accept "&name;", "&number;" and "&hexadecimal;" but format them differently
-                            setFormat (index, match.capturedLength(), encodedFormat);
-                            index = text.indexOf (ampersand, index + match.capturedLength());
-                        }
-                        else
-                        {
-                            setFormat (index, 1, errorFormat);
-                            index = text.indexOf (ampersand, index + 1);
-                        }
-                    }
-                    while (index >= 0 && format (index) != mainFormat)
-                        index = text.indexOf (ampersand, index + 1);
-                }
-
-                break;
-            }
-        }
-    }
-}
-/*************************/
-void Highlighter::htmlCSSHighlighter (const QString &text, const int start)
-{
-    if (progLan != "html") return;
-
-    int cssIndex = start;
-
-    QRegularExpressionMatch startMatch;
-    static const QRegularExpression cssStartExp ("<(style|STYLE)>|<(style|STYLE)\\s+[^>]*>");
-    QRegularExpressionMatch endMatch;
-    static const QRegularExpression cssEndExp ("</(style|STYLE)\\s*>");
-    QRegularExpressionMatch braMatch;
-    static const QRegularExpression braEndExp (">");
-
-    /* switch to css temporarily */
-    commentStartExpression = htmlSubcommetStart;
-    commentEndExpression = htmlSubcommetEnd;
-    progLan = "css";
-
-    bool wasCSS (false);
-    int prevState = previousBlockState();
-    bool wasStyle (prevState == htmlStyleState
-                   || prevState == htmlStyleSingleQuoteState
-                   || prevState == htmlStyleDoubleQuoteState);
-    QTextBlock prevBlock = currentBlock().previous();
-    if (prevBlock.isValid())
-    {
-        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            wasCSS = prevData->labelInfo() == "CSS"; // it's labeled below
-    }
-
-    QTextCharFormat fi;
-    int matched = 0;
-    if ((!wasCSS || start > 0)  && !wasStyle)
-    {
-        cssIndex = text.indexOf (cssStartExp, start, &startMatch);
-        fi = format (cssIndex);
-        while (cssIndex >= 0
-               && (fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            cssIndex = text.indexOf (cssStartExp, cssIndex + startMatch.capturedLength(), &startMatch);
-            fi = format (cssIndex);
-        }
-    }
-    else if (wasStyle)
-    {
-        cssIndex = text.indexOf (braEndExp, start, &braMatch);
-        fi = format (cssIndex);
-        while (cssIndex >= 0
-               && (fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            cssIndex = text.indexOf (braEndExp, cssIndex + 1, &braMatch);
-            fi = format (cssIndex);
-        }
-        if (cssIndex > -1)
-            matched = braMatch.capturedLength(); // 1
-    }
-    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
-    int bn = currentBlock().blockNumber();
-    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
-    while (cssIndex >= 0)
-    {
-        /* single-line style bracket (<style ...>) */
-        if (matched == 0 && (!wasCSS || cssIndex > 0))
-            matched = startMatch.capturedLength();
-
-        /* starting from here, clear all html formats...
-           (NOTE: "mainFormat" is used instead of "neutralFormat"
-           for HTML ampersands to be formatted correctly.) */
-        setFormat (cssIndex + matched, text.length() - cssIndex - matched, mainFormat);
-        setCurrentBlockState (0);
-
-        /* ... and apply the css formats */
-        cssHighlighter (text, mainFormatting, cssIndex + matched);
-        multiLineComment (text,
-                          cssIndex + matched,
-                          commentStartExpression, commentEndExpression,
-                          htmlCSSCommentState,
-                          commentFormat);
-        if (mainFormatting)
-        {
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            { // CSS doesn't have any main formatting except for witesapces
-                if (rule.format == whiteSpaceFormat)
-                {
-                    QRegularExpressionMatch match;
-                    int index = text.indexOf (rule.pattern, start, &match);
-                    while (index >= 0)
-                    {
-                        setFormat (index, match.capturedLength(), rule.format);
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                    }
-                }
-            }
-        }
-
-        /* now, search for the end of the css block */
-        int cssEndIndex;
-        if (cssIndex == 0 && wasCSS)
-            cssEndIndex = text.indexOf (cssEndExp, 0, &endMatch);
-        else
-        {
-            cssEndIndex = text.indexOf (cssEndExp,
-                                        cssIndex + matched,
-                                        &endMatch);
-        }
-
-        fi = format (cssEndIndex);
-        while (cssEndIndex > -1
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat))
-        {
-            cssEndIndex = text.indexOf (cssEndExp, cssEndIndex + endMatch.capturedLength(), &endMatch);
-            fi = format (cssEndIndex);
-        }
-
-        int len;
-        if (cssEndIndex == -1)
-        {
-            if (currentBlockState() == 0)
-                setCurrentBlockState (htmlCSSState); // for updating the next line
-            /* Since the next line couldn't be processed based on the state of this line,
-               we label this line to show that it's written in css and not html. */
-            curData->insertInfo ("CSS");
-            len = text.length() - cssIndex;
-        }
-        else
-        {
-            len = cssEndIndex - cssIndex
-                  + endMatch.capturedLength();
-            /* if the css block ends at this line, format
-               the rest of the line as an html code again */
-            setFormat (cssEndIndex, text.length() - cssEndIndex, mainFormat);
-            setCurrentBlockState (0);
-            progLan = "html";
-            commentStartExpression = htmlCommetStart;
-            commentEndExpression = htmlCommetEnd;
-            htmlBrackets (text, cssEndIndex);
-            commentStartExpression = htmlSubcommetStart;
-            commentEndExpression = htmlSubcommetEnd;
-            progLan = "css";
-        }
-
-        cssIndex = text.indexOf (cssStartExp, cssIndex + len, &startMatch);
-        fi = format (cssIndex);
-        while (cssIndex >= 0
-               && (fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            cssIndex = text.indexOf (cssStartExp, cssIndex + startMatch.capturedLength(), &startMatch);
-            fi = format (cssIndex);
-        }
-        matched = 0; // single-line style bracket (<style ...>)
-    }
-
-    /* revert to html */
-    progLan = "html";
-    commentStartExpression = htmlCommetStart;
-    commentEndExpression = htmlCommetEnd;
-}
-/*************************/
-void Highlighter::htmlJavascript (const QString &text)
-{
-    if (progLan != "html") return;
-
-    int javaIndex = 0;
-
-    QRegularExpressionMatch startMatch;
-    //QRegularExpression javaStartExp ("<(script|SCRIPT)\\s+[^<>]*(((language|LANGUAGE)\\s*\\=\\s*\"\\s*)|((TYPE|type)\\s*\\=\\s*\"\\s*(TEXT|text)/))(JavaScript|javascript)\\s*\"[^<>]*>");
-    static const QRegularExpression javaStartExp ("<(script|SCRIPT)\\s*>|<(script|SCRIPT)\\s+[^<>]*>");
-    QRegularExpressionMatch endMatch;
-    static const QRegularExpression javaEndExp ("</(script|SCRIPT)\\s*>");
-
-    /* switch to javascript temporarily */
-    commentStartExpression = htmlSubcommetStart;
-    commentEndExpression = htmlSubcommetEnd;
-    progLan = "javascript";
-
-    bool wasJavascript (false);
-    QTextBlock prevBlock = currentBlock().previous();
-    if (prevBlock.isValid())
-    {
-        if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            wasJavascript = prevData->labelInfo() == "JS"; // it's labeled below
-    }
-
-    QTextCharFormat fi;
-    if (!wasJavascript)
-    {
-        javaIndex = text.indexOf (javaStartExp, 0, &startMatch);
-        fi = format (javaIndex);
-        while (javaIndex >= 0
-               && (fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            javaIndex = text.indexOf (javaStartExp, javaIndex + startMatch.capturedLength(), &startMatch);
-            fi = format (javaIndex);
-        }
-    }
-    int matched = 0;
-    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
-    int bn = currentBlock().blockNumber();
-    bool mainFormatting (bn >= startCursor.blockNumber() && bn <= endCursor.blockNumber());
-    while (javaIndex >= 0)
-    {
-        if (!wasJavascript || javaIndex > 0)
-        {
-            matched = startMatch.capturedLength();
-            curData->insertLastFormattedQuote (javaIndex + matched);
-            curData->insertLastFormattedRegex (javaIndex + matched);
-        }
-
-        /* starting from here, clear all html formats... */
-        setFormat (javaIndex + matched, text.length() - javaIndex - matched, mainFormat);
-        setCurrentBlockState (0);
-
-        /* ... and apply the javascript formats */
-        singleLineComment (text, javaIndex + matched);
-        /* javascript single-line comment doesn't comment out
-           the end of a javascript block inside HTML */
-        int tmpIndx = -1;
-        if (currentBlockState() == regexExtraState)
-        {
-            tmpIndx = javaIndex + matched;
-            while (tmpIndx < text.length() && format (tmpIndx) != commentFormat)
-                ++ tmpIndx;
-            tmpIndx = text.indexOf (javaEndExp, tmpIndx);
-        }
-        if (tmpIndx > -1)
-        {
-            setCurrentBlockState (0);
-            setFormat (tmpIndx, text.length() - tmpIndx, mainFormat);
-            QString txt = text.left (tmpIndx);
-            multiLineQuote (txt, javaIndex + matched, htmlJavaCommentState);
-            multiLineComment (txt,
-                              javaIndex + matched,
-                              commentStartExpression, commentEndExpression,
-                              htmlJavaCommentState,
-                              commentFormat);
-            multiLineRegex (txt, javaIndex + matched);
-        }
-        else
-        {
-            multiLineQuote (text, javaIndex + matched, htmlJavaCommentState);
-            multiLineComment (text,
-                              javaIndex + matched,
-                              commentStartExpression, commentEndExpression,
-                              htmlJavaCommentState,
-                              commentFormat);
-            multiLineRegex (text, javaIndex + matched);
-        }
-        if (mainFormatting)
-        {
-            for (const HighlightingRule &rule : qAsConst (highlightingRules))
-            {
-                if (rule.format == commentFormat)
-                    continue;
-
-                QRegularExpressionMatch match;
-                int index = text.indexOf (rule.pattern, javaIndex + matched, &match);
-                if (rule.format != whiteSpaceFormat)
-                {
-                    fi = format (index);
-                    while (index >= 0
-                           && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                               || fi == commentFormat || fi == urlFormat
-                               || fi ==  regexFormat))
-                    {
-                        index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                        fi = format (index);
-                    }
-                }
-
-                while (index >= 0)
-                {
-                    setFormat (index, match.capturedLength(), rule.format);
-                    index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-
-                    if (rule.format != whiteSpaceFormat)
-                    {
-                        fi = format (index);
-                        while (index >= 0
-                               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                                   || fi == commentFormat || fi == urlFormat
-                                   || fi == regexFormat))
-                        {
-                            index = text.indexOf (rule.pattern, index + match.capturedLength(), &match);
-                            fi = format (index);
-                        }
-                    }
-                }
-            }
-        }
-
-        /* now, search for the end of the javascript block */
-        int javaEndIndex;
-        if (javaIndex == 0 && wasJavascript)
-            javaEndIndex = text.indexOf (javaEndExp, 0, &endMatch);
-        else
-        {
-            javaEndIndex = text.indexOf (javaEndExp,
-                                         javaIndex + matched,
-                                         &endMatch);
-        }
-
-        fi = format (javaEndIndex);
-        while (javaEndIndex > -1
-               && (fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == regexFormat))
-        {
-            javaEndIndex = text.indexOf (javaEndExp, javaEndIndex + endMatch.capturedLength(), &endMatch);
-            fi = format (javaEndIndex);
-        }
-
-        int len;
-        if (javaEndIndex == -1)
-        {
-            if (currentBlockState() == 0)
-                setCurrentBlockState (htmlJavaState); // for updating the next line
-            /* Since the next line couldn't be processed based on the state of this line,
-               we label this line to show that it's written in javascript and not html. */
-            curData->insertInfo ("JS");
-            len = text.length() - javaIndex;
-        }
-        else
-        {
-            len = javaEndIndex - javaIndex
-                  + endMatch.capturedLength();
-            /* if the javascript block ends at this line,
-               format the rest of the line as an html code again */
-            setFormat (javaEndIndex, text.length() - javaEndIndex, mainFormat);
-            setCurrentBlockState (0);
-            progLan = "html";
-            commentStartExpression = htmlCommetStart;
-            commentEndExpression = htmlCommetEnd;
-            htmlBrackets (text, javaEndIndex);
-            htmlCSSHighlighter (text, javaEndIndex);
-            commentStartExpression = htmlSubcommetStart;
-            commentEndExpression = htmlSubcommetEnd;
-            progLan = "javascript";
-        }
-
-        javaIndex = text.indexOf (javaStartExp, javaIndex + len, &startMatch);
-        fi = format (javaEndIndex);
-        while (javaIndex > -1
-               && (fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            javaIndex = text.indexOf (javaStartExp, javaIndex + startMatch.capturedLength(), &startMatch);
-            fi = format (javaEndIndex);
-        }
-    }
-
-    /* revert to html */
-    progLan = "html";
-    commentStartExpression = htmlCommetStart;
-    commentEndExpression = htmlCommetEnd;
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter-patterns.cpp featherpad-1.0.1/featherpad/highlighter-patterns.cpp
--- featherpad-0.17.1/featherpad/highlighter-patterns.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-patterns.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-QStringList Highlighter::keywords (const QString &lang)
-{
-    QStringList keywordPatterns;
-    if (lang == "c" || lang == "cpp")
-    {
-        keywordPatterns << "\\b(and|asm|auto)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(const|case|catch|cdecl|continue)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(break|default|do)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(enum|explicit|else|extern)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(for|goto|if|NULL|or|pasca|register|return)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(signals|sizeof|static|struct|switch)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(typedef|typename|union|volatile|while)(?!(\\.|-|@|#|\\$))\\b";
-
-        if (lang == "c")
-            keywordPatterns << "\\b(FALSE|TRUE)(?!(\\.|-|@|#|\\$))\\b";
-        else
-            keywordPatterns << "\\b(class|const_cast|delete|dynamic_cast)(?!(\\.|-|@|#|\\$))\\b"
-                            << "\\b(false|foreach|friend|inline|namespace|new|operator)(?!(\\.|-|@|#|\\$))\\b"
-                            << "\\b(nullptr|override|private|protected|public|qobject_cast|reinterpret_cast|slots|static_cast)(?!(\\.|-|@|#|\\$))\\b"
-                            << "\\b(template|true|this|throw|try|typeid|using|virtual)(?!(\\.|-|@|#|\\$))\\b"
-                            << "\\bthis(?=->)\\b"; // "this" can be followed by "->"
-    }
-    else if (lang == "sh" || lang == "makefile" || lang == "cmake") // the characters "(", ";" and "&" will be reformatted after this
-    {
-        keywordPatterns << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(alias|bg|bind|break|builtin)(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(caller|case|command|compgen|complete|continue)(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(declare|default|dirs|disown|do|done)(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(echo|elif|elseif|else|enable|esac|eval|exec|exit|export)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(?<!(@|\\^|\\$|\\.|%|\\*|\\+|-|/))false(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(fg|fi|for|foreach|getopts|hash|help|history|if|in)(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(jobs|let|local|logout|popd|printf|pushd|read|readonly|return)(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(select|seq|set|shift|shopt|source|suspend|test|then|times|trap|type|typeset)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(?<!(@|\\^|\\$|\\.|%|\\*|\\+|-|/))true(?!(\\.|-|@|#|\\$))\\b"
-                        << "((^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)((if|then|elif|elseif|else|fi|while|do|done|esac)\\s+)*)(umask|unalias|unset|until|wait|while)(?!(\\.|-|@|#|\\$))\\b";
-        if (lang == "cmake") // (?i) is supported by QRegularExpression for ignoring case-sensitivity
-            keywordPatterns << "(?i)(^\\s*|[\\(\\);&`\\|{}!=^]+\\s*|(?<=~|\\.)+\\s+)(endif|endmacro|endwhile|file|include|option|project|add_compile_options|add_custom_command|add_custom_target|add_definitions|add_dependencies|add_executable|add_library|add_subdirectory|add_feature_info|add_test|aux_source_directory|build_command|cmake_dependent_option|cmake_host_system_information|cmake_minimum_required|cmake_parse_arguments|cmake_policy|configure_file|configure_package_config_file|create_test_sourcelist|define_property|ecm_configure_package_config_file|ecm_setup_version|enable_language|enable_testing|endforeach|endfunction|exec_program|execute_process|feature_summary|find_file|find_library|find_package|find_package_handle_standard_args|find_path|find_program|fltk_wrap_ui|function|get_cmake_property|get_directory_property|get_filename_component|get_property|get_source_file_property|get_target_property|get_test_property|include_directories|include_external_msproject|include_regular_expressionlink_directories|list|load_cache|load_command|macro|mark_as_advanced|math|message|pkg_check_modules|pkg_search_module|print_enabled_features|print_disabled_features|qt_wrap_cpp|qt_wrap_ui|remove_definitions|separate_arguments|set_directory_properties|set_feature_info|set_package_properties|set_property|set_source_files_properties|set_target_properties|set_tests_properties|site_name|source_group|string|target_compile_definitions|target_compile_options|target_include_directories|target_link_libraries|try_compile|try_run|variable_watch|write_basic_package_version_file)\\s*(?=(\\(|$))";
-    }
-    else if (lang == "qmake")
-    {
-        keywordPatterns << "\\b(CONFIG|DEFINES|DEF_FILE|DEPENDPATH|DEPLOYMENT_PLUGIN|DESTDIR|DISTFILES|DLLDESTDIR|FORMS|GUID|HEADERS|ICON|IDLSOURCES|INCLUDEPATH|INSTALLS|LEXIMPLS|LEXOBJECTS|LEXSOURCES|LIBS|LITERAL_HASH|MAKEFILE|MAKEFILE_GENERATOR|MOC_DIR|OBJECTS|OBJECTS_DIR|POST_TARGETDEPS|PRE_TARGETDEPS|PRECOMPILED_HEADER|PWD|OTHER_FILES|OUT_PWD|QMAKE|QMAKESPEC|QMAKE_AR_CMD|QMAKE_BUNDLE_DATA|QMAKE_BUNDLE_EXTENSION|QMAKE_BUNDLE_EXTENSION|QMAKE_CFLAGS|QMAKE_CFLAGS|QMAKE_CFLAGS_RELEASE|QMAKE_CFLAGS_SHLIB|QMAKE_CFLAGS_THREAD|QMAKE_CFLAGS_WARN_OFF|QMAKE_CFLAGS_WARN_ON|QMAKE_CLEAN|QMAKE_CXX|QMAKE_CXXFLAGS|QMAKE_CXXFLAGS_DEBUG|QMAKE_CXXFLAGS_RELEASE|QMAKE_CXXFLAGS_SHLIB|QMAKE_CXXFLAGS_THREAD|QMAKE_CXXFLAGS_WARN_OFF|QMAKE_CXXFLAGS_WARN_ON|QMAKE_DISTCLEAN|QMAKE_EXTENSION_SHLIB|QMAKE_EXTENSION_STATICLIB|QMAKE_EXT_MOC|QMAKE_EXT_UI|QMAKE_EXT_PRL|QMAKE_EXT_LEX|QMAKE_EXT_YACC|QMAKE_EXT_OBJ|QMAKE_EXT_CPP|QMAKE_EXT_H|QMAKE_EXTRA_COMPILERS|QMAKE_EXTRA_TARGETS|QMAKE_FAILED_REQUIREMENTS|QMAKE_FRAMEWORK_BUNDLE_NAME|QMAKE_FRAMEWORK_VERSION|QMAKE_HOST|QMAKE_INCDIR|QMAKE_INCDIR_EGL|QMAKE_INCDIR_OPENGL|QMAKE_INCDIR_OPENGL_ES2|QMAKE_INCDIR_OPENVG|QMAKE_INCDIR_X11|QMAKE_INFO_PLIST|QMAKE_LFLAGS|QMAKE_LFLAGS_CONSOLE|QMAKE_LFLAGS_DEBUG|QMAKE_LFLAGS_PLUGIN|QMAKE_LFLAGS_RPATH|QMAKE_LFLAGS_REL_RPATH|QMAKE_REL_RPATH_BASE|QMAKE_LFLAGS_RPATHLINK|QMAKE_LFLAGS_RELEASE|QMAKE_LFLAGS_APP|QMAKE_LFLAGS_SHLIB|QMAKE_LFLAGS_SONAME|QMAKE_LFLAGS_THREAD|QMAKE_LFLAGS_WINDOWS|QMAKE_LIBDIR|QMAKE_LIBDIR_FLAGS|QMAKE_LIBDIR_EGL|QMAKE_LIBDIR_OPENGL|QMAKE_LIBDIR_OPENVG|QMAKE_LIBDIR_X11|QMAKE_LIBS|QMAKE_LIBS_EGL|QMAKE_LIBS_OPENGL|QMAKE_LIBS_OPENGL_ES1|QMAKE_LIBS_OPENGL_ES2|QMAKE_LIBS_OPENVG|QMAKE_LIBS_THREAD|QMAKE_LIBS_X11|QMAKE_LIB_FLAG|QMAKE_LINK_SHLIB_CMD|QMAKE_LN_SHLIB|QMAKE_OBJECTIVE_CFLAGS|QMAKE_POST_LINK|QMAKE_PRE_LINK|QMAKE_PROJECT_NAME|QMAKE_MAC_SDK|QMAKE_MACOSX_DEPLOYMENT_TARGET|QMAKE_MAKEFILE|QMAKE_QMAKE|QMAKE_RESOURCE_FLAGS|QMAKE_RPATHDIR|QMAKE_RPATHLINKDIR|QMAKE_RUN_CC|QMAKE_RUN_CC_IMP|QMAKE_RUN_CXX|QMAKE_RUN_CXX_IMP|QMAKE_SONAME_PREFIX|QMAKE_TARGET|QMAKE_TARGET_COMPANY|QMAKE_TARGET_DESCRIPTION|QMAKE_TARGET_COPYRIGHT|QMAKE_TARGET_PRODUCT|QT|QTPLUGIN|QT_VERSION|QT_MAJOR_VERSION|QT_MINOR_VERSION|QT_PATCH_VERSION|RC_CODEPAGE|RC_DEFINES|RCC_DIR|RC_FILE|RC_ICONS|RC_INCLUDEPATH|RC_LANG|REQUIRES|RES_FILE|RESOURCES|SIGNATURE_FILE|SOURCES|SUBDIRS|TARGET|TARGET_EXT|TARGET_x|TARGET_x.y.z|TEMPLATE|TRANSLATIONS|UI_DIR|VERSION|VERSION_PE_HEADER|VER_MAJ|VER_MIN|VER_PAT|VPATH|WINRT_MANIFEST|YACCSOURCES|_PRO_FILE_|_PRO_FILE_PWD_)(?!(@|#|\\$))\\b";
-    }
-    else if (lang == "troff")
-    {
-        keywordPatterns << "^\\.(AT|B|BI|BR|BX|CW|DT|EQ|EN|I|IB|IR|IP|LG|LP|NL|P|PE|PD|PP|PS|R|RI|RB|RS|RE|SH|SM|SB|SS|TH|TS|TE|HP|TP|UC|UL|ab|ad|af|am|as|bd|bp|br|brp|c2|cc|ce|cend|cf|ch|cs|cstart|cu|da|de|di|ds|dt|ec|el|em|end|eo|ev|ex|fc|fi|fl|fp|ft|hc|hw|hy|ie|if|ig|in|it|lc|lg|ll|ls|lt|mc|mk|na|ne|nf|nh|nm|nn|nr|ns|nx|os|pc|pi|pl|pm|pm|pn|po|ps|rd|rj|rm|rn|rr|rs|rt|so|sp|ss|sv|sy|ta|tc|ti|tl|tm|tr|uf|ul|vs|wh)(?!(\\.|-|@|#|\\$))\\b";
-    }
-    else if (lang == "LaTeX")
-    {
-        keywordPatterns << "(?<!\\\\)\\\\(documentclass|begin|end|usepackage|maketitle|include|includeonly|input)(?!(@|#))(_|\\b)"
-                        << "(?<!\\\\)\\\\(section|subsection|subsubsection|title|author|part|chapter|paragraph|subparagraph)\\*?\\s*\\{[^{}]*\\}";
-    }
-    else if (lang == "perl")
-    {
-        keywordPatterns << "\\b(?<!(@|#|%|\\$))(abs|accept|alarm|and|atan2|bind|binmode|bless|break)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(caller|chdir|chmod|chown|chroot|chomp|chop|chr|close|closedir|cmp|connect|continue|cos|crypt)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(dbmclose|dbmopen|defined|delete|die|do|dump)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(each|else|elsif|endgrent|endhostent|endnetent|endprotoent|endpwent|endservent|eof|eq|eval|exec|exists|exit|exp)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(fcntl|fileno|flock|for|foreach|fork|format|formline)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(ge|getc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|goto|grep|gt|hex)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(if|import|index|int|ioctl|join|keys|kill)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(last|lc|lcfirst|le|length|link|listen|local|localtime|lock|log|lt|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|ne|next|no|not)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(oct|open|opendir|or|ord|our|pack|package|pipe|pop|pos|print|printf|prototype|push|quotemeta)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(rand|read|readdir|readlink|readpipe|recv|redo|ref|rename|require|return|reverse|rewinddir|rindex|rmdir)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(say|scalar|seek|seekdir|select|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|state|study|sub|substr|symlink|syscall|sysopen|sysread|sysseek|system|syswrite|switch)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(tell|telldir|tie|tied|time|times|truncate)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(uc|ucfirst|umask|undef|unless|unlink|unpack|unshift|untie|use|utime)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(values|vec)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))(wait|waitpid|warn|wantarray|while|write|xor)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|%|\\$))__(FILE|LINE|PACKAGE)__";
-    }
-    else if (lang == "ruby")
-    {
-        keywordPatterns << "\\b(__FILE__|__LINE__)(?!(@|#|\\$))\\b"
-                        << "\\b(alias|and|begin|BEGIN|break)(?!(@|#|\\$))\\b"
-                        << "\\b(case|class|catch|defined|do|def)(?!(@|#|\\$))\\b"
-                        << "\\b(else|elsif|end|END|ensure|for|false|fail)(?!(@|#|\\$))\\b"
-                        << "\\b(if|in|include|loop|load|module)(?!(@|#|\\$))\\b"
-                        << "\\b(next|nil|not|or)(?!(@|#|\\$))\\b"
-                        << "\\b(raise|redo|rescue|retry|return)(?!(@|#|\\$))\\b"
-                        << "\\b(super|self|then|true|throw)(?!(@|#|\\$))\\b"
-                        << "\\b(undef|unless|until|when|while|yield)(?!(@|#|\\$))\\b";
-    }
-    else if (lang == "lua")
-        keywordPatterns << "\\b(and|break|do)(?!(\\.|@|#|\\$))\\b"
-                        << "\\b(else|elseif|end)(?!(\\.|@|#|\\$))\\b"
-                        << "\\b(false|for|function)(?!(\\.|@|#|\\$))\\b"
-                        << "\\b(if|in|local|nil|not|or|repeat|return)(?!(\\.|@|#|\\$))\\b"
-                        << "\\b(then|true|until|while)(?!(\\.|@|#|\\$))\\b";
-    else if (lang == "python")
-        keywordPatterns << "\\b(and|as|assert|break|class|continue)(?!(@|\\$))\\b"
-                        << "\\b(def|del|elif|else|except|False|finally|for|from|global)(?!(@|\\$))\\b"
-                        << "\\b(if|is|import|in|lambda|None|not|or|raise|return|True|try|while|with|yield)(?!(@|\\$))\\b"
-                        << "\\b(exec|print)(?!(@|\\$|\\s*\\())\\b";
-    else if (lang == "javascript" || lang == "qml")
-    {
-        keywordPatterns << "\\b(?<!(@|#|\\$))(abstract|arguments|await|break)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(case|catch|class|const|continue)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(debugger|default|delete|do)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(else|enum|eval|extends)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(false|final|finally|for|function|goto)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(if|implements|in|Infinity|instanceof|interface|let)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(Math|native|new|null|of)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(package|private|protected|prototype|public|return)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(static|super|switch|synchronized)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(throw|throws|this|transient|true|try|typeof)(?!(@|#|\\$))\\b"
-                        << "\\b(?<!(@|#|\\$))(undefined|void|volatile|while|with|yield)(?!(@|#|\\$))\\b";
-        if (lang == "javascript")
-            keywordPatterns << "\\b(?<!(@|#|\\$))(var)(?!(@|#|\\$))\\b";
-        else if (lang == "qml")
-            keywordPatterns << "\\b(?<!(@|#|\\$))(alias|id|property|readonly|signal)(?!(@|#|\\$))\\b";
-    }
-    else if (lang == "php")
-        keywordPatterns << "\\b(__FILE__|__LINE__|__FUNCTION__|__CLASS__|__METHOD__|__DIR__|__NAMESPACE__)(?!(#|\\$))\\b"
-                        << "\\b(and|abstract|array|as|break)(?!(#|\\$))\\b"
-                        << "\\b(case|catch|cfunction|class|clone|const|continue)(?!(#|\\$))\\b"
-                        << "\\b(declare|default|die|do)(?!(#|\\$))\\b"
-                        << "\\b(each|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exception|exit|extends)(?!(#|\\$))\\b"
-                        << "\\b(false|final|for|foreach|function)(?!(#|\\$))\\b"
-                        << "\\b(global|goto|if|implements|interface|instanceof|isset)(?!(#|\\$))\\b"
-                        << "\\b(list|namespace|new|null|old_function|or)(?!(#|\\$))\\b"
-                        << "\\b(php_user_filter|print|private|protected|public|return)(?!(#|\\$))\\b"
-                        << "\\b(static|switch|throw|true|try)(?!(#|\\$))\\b"
-                        << "\\b(unset|use|var|while|xor)(?!(#|\\$))\\b";
-    else if (lang == "scss") // taken from http://sass-lang.com/documentation/Sass/Script/Functions.html
-        keywordPatterns << "\\b(none|null)(?!(\\.|-|@|#|\\$))\\b"
-                        << "\\b(abs|adjust-color|adjust-hue|alpha|append|blue|call|ceil|change-color|comparable|complement|content-exists|darken|desaturate|feature-exists|floor|function-exists|get-function|global-variable-exists|grayscale|green|hsl|hsla|hue|ie-hex-str|if|index|inspect|invert|is-bracketed|is-superselector|join|keywords|length|lighten|lightness|list-separator|map-get|map-has-key|map-keys|map-merge|map-remove|map-values|max|min|mixin-exists|mix|nth|opacify|percentage|quote|random|red|rgb|rgba|round|scale-color|saturate|saturation|selector-nest|selector-append|selector-extend|selector-parse|selector-replace|selector-unify|set-nth|simple-selectors|str-index|str-insert|str-length|str-slice|to-lower-case|to-upper-case|transparentize|type-of|unit|unitless|unquote|variable-exists|zip)(?=\\()"
-                        << "\\bunique-id\\(\\s*\\)";
-    else if (lang == "dart")
-            keywordPatterns << "\\b(abstract|as|assert|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic)\\b"
-                            << "\\b(else|enum|export|extends|external|factory|false|final|finally|for|Function|get|hide|if|implements|import|in|interface|is)\\b"
-                            << "\\b(library|mixin|new|null|on|operator|part|rethrow|return|set|show|static|super|switch|sync)\\b"
-                            << "\\b(this|throw|true|try|typedef|var|void|while|with|yield)\\b";
-
-    return keywordPatterns;
-}
-/*************************/
-QStringList Highlighter::types()
-{
-    QStringList typePatterns;
-    if (progLan == "c" || progLan == "cpp")
-    {
-        typePatterns << "\\b(bool|char|double|float)(?!(\\.|-|@|#|\\$))\\b"
-                     << "\\b(gchar|gint|guint|guint8|guint16|guint32|guint64|gboolean)(?!(\\.|-|@|#|\\$))\\b"
-                     << "\\b(int|long|short)(?!(\\.|-|@|#|\\$))\\b"
-                     << "\\b(unsigned|uint|uint8|uint16|uint32|uint64|uint8_t|uint16_t|uint32_t|uint64_t)(?!(\\.|-|@|#|\\$))\\b"
-                     << "\\b(uid_t|gid_t|mode_t)(?!(\\.|-|@|#|\\$))\\b"
-                     << "\\b(void|wchar_t)(?!(\\.|-|@|#|\\$))\\b";
-        if (progLan == "cpp")
-            typePatterns << "\\b(qreal|qint8|quint8|qint16|quint16|qint32|quint32|qint64|quint64|qlonglong|qulonglong|qptrdiff|quintptr)(?!(\\.|-|@|#|\\$))\\b"
-                         << "\\b(uchar|ulong|ushort)(?!(\\.|-|@|#|\\$))\\b"
-                         << "\\b(std::[a-z_]+)(?=\\s*\\S+)(?!(\\s*\\(|\\.|-|@|#|\\$))\\b";
-    }
-    else if (progLan == "qml")
-    {
-        typePatterns << "\\b(?<!(@|#|\\$))(bool|double|enumeration|int|list|real|string|url|var)(?!(@|#|\\$))\\b"
-                     << "\\b(?<!(@|#|\\$))(color|date|font|matrix4x4|point|quaternion|rect|size|vector2d|vector3d|vector4d)(?!(@|#|\\$))\\b";
-    }
-    else if (progLan == "dart")
-    {
-        typePatterns << "\\b(bool|double|int|num)(?!(@|#|\\$))\\b";
-    }
-    return typePatterns;
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter-perl-regex.cpp featherpad-1.0.1/featherpad/highlighter-perl-regex.cpp
--- featherpad-0.17.1/featherpad/highlighter-perl-regex.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-perl-regex.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,668 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2019-2020 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-/* NOTE: We deal with four kinds of regex structures:
-
-         1. Simple, single structures, like /.../ or q|...|;
-         2. Single structures with braces, like {...} or q{...};
-         3. Simple replacing operators like s/.../.../; and
-         4. Replacing with braces, like s{...}...{...}
-
-         We cheat and include "q", "qq", "qw", "qx" and "qr" here to have a simpler code.
-         Moreover, the => operator is excluded. */
-static const QRegularExpression rExp ("/|\\b(?<!(@|#|%|\\$))(m|qr|q|qq|qw|qx|qr|(?<!-)s|y|tr)\\s*(?!\\=>)[^\\w\\}\\)\\]>\\s]");
-
-// This is only for the start.
-bool Highlighter::isEscapedPerlRegex (const QString &text, const int pos)
-{
-    if (pos < 0) return false;
-
-    if (format (pos) == quoteFormat || format (pos) == altQuoteFormat
-        || format (pos) == commentFormat || format (pos) == urlFormat)
-    {
-        return true;
-    }
-
-    static QRegularExpression perlKeys;
-
-    int i = pos - 1;
-    if (i < 0) return false;
-
-    if (text.at (pos) != '/')
-    {
-        if (format (i) == regexFormat)
-            return true;
-        return false;
-    }
-
-    /* FIXME: Why? */
-    int slashes = 0;
-    while (i >= 0 && format (i) != regexFormat && text.at (i) == '/')
-    {
-        -- i;
-        ++ slashes;
-    }
-    if (slashes % 2 != 0)
-        return true;
-
-    i = pos - 1;
-    while (i >= 0 && (text.at (i) == ' ' || text.at (i) == '\t'))
-        --i;
-    if (i >= 0)
-    {
-        QChar ch = text.at (i);
-        if (format (i) != regexFormat && (ch.isLetterOrNumber() || ch == '_'
-                                          || ch == ')' || ch == ']' || ch == '}' || ch == '#'
-                                          || (i == pos - 1 && (ch == '$' || ch == '@'))
-                                          /* after an escaped start quote */
-                                          || (i > 0 && (ch == '\"' || ch == '\'' || ch == '`')
-                                              && format (i) != quoteFormat && format (i) != altQuoteFormat)))
-        {
-            /* a regex isn't escaped if it follows a Perl keyword */
-            if (perlKeys.pattern().isEmpty())
-                perlKeys.setPattern (keywords (progLan).join ('|'));
-            int len = qMin (12, i + 1);
-            QString str = text.mid (i - len + 1, len);
-            int j;
-            QRegularExpressionMatch keyMatch;
-            if ((j = str.lastIndexOf (perlKeys, -1, &keyMatch)) > -1 && j + keyMatch.capturedLength() == len)
-                return false;
-            /* check the flags too */
-            if (ch.isLetter())
-            {
-                static const QString flags ("sgimx");
-                while (i > 0 && flags.contains (text.at (i)))
-                    -- i;
-                if (format (i) == regexFormat)
-                    return false;
-            }
-            return true;
-        }
-    }
-
-    return false;
-}
-/*************************/
-// Takes care of open braces too.
-int Highlighter::findDelimiter (const QString &text, const int index,
-                                const QRegularExpression &delimExp, int &capturedLength) const
-{
-    int i = qMax (index, 0);
-    const QString pattern = delimExp.pattern();
-    if (pattern.startsWith ("\\")
-        && (pattern.endsWith (")") || pattern.endsWith ("}")
-            || pattern.endsWith ("]") || pattern.endsWith (">")))
-    { // the end delimiter should be found
-        int N = 1;
-        if (index < 0)
-        {
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                    N = prevData->openNests();
-            }
-        }
-        QChar endBrace = pattern.at (pattern.size() - 1);
-        QChar startBrace = endBrace == ')' ? '('
-                           : endBrace == '}' ? '{'
-                           : endBrace == ']' ? '['
-                           : '<';
-        const int L = text.length();
-        while (N > 0 && i < L)
-        {
-            QChar c = text.at (i);
-            if (c == endBrace)
-            {
-                if (!isEscapedChar (text, i))
-                    -- N;
-            }
-            else if (c == startBrace && !isEscapedChar (text, i))
-                ++ N;
-            ++ i;
-        }
-        if (N == 0)
-        {
-            if (i == 0) // doesn't happen
-            {
-                int res = text.indexOf (delimExp, 0);
-                capturedLength = res == -1 ? 0 : 1;
-                return res;
-            }
-            else
-            {
-                capturedLength = 1;
-                return i - 1;
-            }
-        }
-        else
-        {
-            static_cast<TextBlockData *>(currentBlock().userData())->insertNestInfo (N);
-            capturedLength = 0;
-            return -1;
-        }
-    }
-    else
-    {
-        QRegularExpressionMatch match;
-        int res = text.indexOf (delimExp, i, &match);
-        capturedLength = match.capturedLength();
-        return res;
-    }
-}
-/*************************/
-static inline QString getEndDelimiter (const QString &brace)
-{
-    if (brace == "(")
-        return ")";
-    if (brace == "{")
-        return "}";
-    if (brace == "[")
-        return "]";
-    if (brace == "<")
-        return ">";
-    return brace;
-}
-/*************************/
-static inline QString startBrace (QString &brace)
-{
-    if (brace == ")")
-        return  "(";
-    if (brace == "}")
-        return "{";
-    if (brace == "]")
-        return "[";
-    if (brace == ">")
-        return "<";
-    return QString();
-}
-/*************************/
-bool Highlighter::isInsidePerlRegex (const QString &text, const int index)
-{
-    if (index < 0) return false;
-
-    int pos = -1;
-
-    if (format (index) == regexFormat)
-        return true;
-    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-    {
-        pos = data->lastFormattedRegex() - 1;
-        if (index <= pos) return false;
-    }
-
-    QRegularExpression exp;
-    bool res = false;
-    bool searchedToReplace = false; // inside the first part of a replacement operator?
-    bool replacing = false; // inside the second part of a replacement operator?
-    bool isQuotingOperator = false;
-    int N;
-
-    if (pos == -1)
-    {
-        if (previousBlockState() != regexState
-            && previousBlockState() != regexExtraState
-            && previousBlockState() != regexSearchState)
-        {
-            exp = rExp;
-            N = 0;
-        }
-        else
-        {
-            QString delimStr;
-            bool between = false; // between search and replacement, like s(...)HERE(...)
-            bool ro = false; // a replacement operator?
-            QTextBlock prevBlock = currentBlock().previous();
-            if (prevBlock.isValid())
-            {
-                if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-                {
-                    delimStr = prevData->labelInfo();
-                    if (delimStr.startsWith("r"))
-                    {
-                        ro = true;
-                        delimStr.remove (0, 1);
-                    }
-                    else if (delimStr.startsWith("b"))
-                    {
-                        between = true;
-                        ro = true;
-                        delimStr.remove (0, 1);
-                    }
-                }
-            }
-            if (delimStr.size() != 1) return false; // impossible
-            if (previousBlockState() == regexState
-                || previousBlockState() == regexExtraState)
-            {
-                N = 1;
-
-                if (previousBlockState() == regexState)
-                {
-                    if (between)
-                    {
-                        /* find the start of the replacement part */
-                        pos = text.indexOf (QRegularExpression ("\\" + delimStr), 0);
-                        if (pos > -1)
-                            setFormat (0, pos + 1, regexFormat);
-                        else
-                        {
-                            setFormat (0, text.length(), regexFormat);
-                            return true;
-                        }
-                        replacing = true;
-                    }
-                    else
-                    {
-                        pos = -2; // to know that the search in continued from the previous line
-                        if (ro) replacing = true;
-                    }
-                }
-                else
-                {
-                    pos = -2;
-                    isQuotingOperator = true;
-                }
-            }
-            else// if (previousBlockState() == regexSearchState) // for "s" and "tr"
-            {
-                N = 0;
-                searchedToReplace = true;
-            }
-            exp.setPattern ("\\" + getEndDelimiter (delimStr));
-            res = true;
-        }
-    }
-    else // a new search from the last position
-    {
-        exp = rExp;
-        N = 0;
-    }
-
-    int startPos = -1;
-    int nxtPos, capturedLength;
-    while ((nxtPos = findDelimiter (text, pos + 1, exp, capturedLength)) >= 0)
-    {
-        /* skip formatted comments and quotes */
-        QTextCharFormat fi = format (nxtPos);
-        if (N % 2 == 0)
-        {
-            isQuotingOperator = false;
-            if (fi == commentFormat || fi == urlFormat
-                || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat)
-            {
-                pos = nxtPos; // don't add capturedLength because "/" might match later
-                continue;
-            }
-            if (!searchedToReplace)
-            {
-                isQuotingOperator = (text.at (nxtPos) == 'q'
-                                     && (capturedLength < 2 || text.at (nxtPos + 1) != 'r'));
-                startPos = nxtPos + capturedLength;
-            }
-        }
-
-        ++N;
-        if (N % 2 == 0
-            ? isEscapedRegexEndSign (text,
-                                     startPos < 0 ? qMax (0, pos + 1) : startPos,
-                                     nxtPos,
-                                     replacing || isQuotingOperator) // an escaped end delimiter
-            : (capturedLength > 1
-               ? isEscapedPerlRegex (text, nxtPos) // an escaped start sign
-               : (searchedToReplace
-                  ? isEscapedRegexEndSign (text,
-                                           startPos < 0 ? qMax (0, pos + 1) : startPos,
-                                           nxtPos) // an escaped middle delimiter
-                  : isEscapedPerlRegex (text, nxtPos)))) // an escaped start slash
-        {
-            if (res)
-            {
-                pos = qMax (pos, 0);
-                setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
-            }
-            if (N % 2 != 0 && capturedLength > 1)
-                pos = nxtPos; // don't add capturedLength because "/" might match later
-            else
-                pos = nxtPos + capturedLength - 1;
-            --N;
-            continue;
-        }
-
-        if (N % 2 == 0 || searchedToReplace)
-        {
-            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                data->insertLastFormattedRegex (nxtPos + capturedLength);
-            pos = qMax (pos, 0);
-            setFormat (pos, nxtPos - pos + capturedLength, regexFormat);
-        }
-
-        if (index <= nxtPos) // they may be equal, as when "//" is at the end of "/...//"
-        {
-            if (N % 2 == 0)
-            {
-                res = true;
-                break;
-            }
-            else if (!searchedToReplace)
-            {
-                res = false;
-                break;
-            }
-            // otherwise, the formatting should continue until the replacement is done
-        }
-
-        if (searchedToReplace)
-        {
-            searchedToReplace = false;
-            replacing = true;
-        }
-        else
-            replacing = false;
-
-        /* NOTE: We should set "res" below because "pos" might be negative next time. */
-        if (N % 2 == 0)
-        {
-            exp = rExp;
-            res = false;
-        }
-        else
-        {
-            res = true;
-            if (capturedLength > 1)
-            {
-                exp.setPattern ("\\" + getEndDelimiter (QString (text.at (nxtPos + capturedLength - 1))));
-                if (text.at (nxtPos) == 's' || text.at (nxtPos) == 't' || text.at (nxtPos) == 'y')
-                {
-                    --N;
-                    searchedToReplace = true;
-                }
-            }
-            else
-            {
-                QString d (QString (text.at (nxtPos)));
-                exp.setPattern ("\\" + d);
-                QString sb = startBrace (d);
-                if (!sb.isEmpty()) // between search and replacement
-                {
-                    /* find the start of the replacement part */
-                    pos = text.indexOf (QRegularExpression ("\\" + sb), nxtPos + 1);
-                    if (pos > -1)
-                    {
-                        setFormat (nxtPos, pos - nxtPos + 1, regexFormat);
-                        continue;
-                    }
-                    else
-                    {
-                        setFormat (nxtPos, text.length() - nxtPos, regexFormat);
-                        return true;
-                    }
-                }
-                // otherwise, the start delimiter of a simple operator has been found
-            }
-        }
-
-        pos = nxtPos + capturedLength - 1;
-    }
-
-    return res;
-}
-/*************************/
-void Highlighter::multiLinePerlRegex(const QString &text)
-{
-    int startIndex = 0;
-    QRegularExpressionMatch startMatch;
-    QRegularExpressionMatch endMatch;
-    QRegularExpression endExp;
-    QTextCharFormat fi;
-    QString delimStr;
-    bool isQuotingOperator = false;
-    bool ro = false; // a replacement operator?
-    bool replacing = false; // inside the second part of a replacement operator?
-
-    QTextCharFormat flagFormat;
-    flagFormat.setFontWeight (QFont::Bold);
-    flagFormat.setForeground (Magenta);
-
-    int prevState = previousBlockState();
-    if (prevState == regexState
-        || prevState == regexExtraState
-        || prevState == regexSearchState)
-    {
-        bool between = false; // between search and replacement, like s(...)HERE(...)
-        QTextBlock prevBlock = currentBlock().previous();
-        if (prevBlock.isValid())
-        {
-            if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-            {
-                delimStr = prevData->labelInfo();
-                if (delimStr.startsWith("r"))
-                {
-                    ro = true;
-                    delimStr.remove (0, 1);
-                }
-                else if (delimStr.startsWith("b"))
-                {
-                    between = true;
-                    ro = true;
-                    delimStr.remove (0, 1);
-                }
-            }
-        }
-        if (delimStr.size() != 1) return; // impossible
-        if (prevState == regexState)
-        {
-            if (between)
-            {
-                /* find the start of the replacement part */
-                startIndex = text.indexOf (QRegularExpression ("\\" + delimStr), 0, &startMatch); // never escaped
-                if (startIndex == -1)
-                {
-                    setCurrentBlockState (regexState);
-                    setFormat (0, text.length(), regexFormat);
-                    /* the prefix "b" distinguishes this state */
-                    static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b" + delimStr);
-                    return;
-                }
-                setFormat (0, startIndex + startMatch.capturedLength(), regexFormat);
-                replacing = true;
-            }
-            else if (ro)
-                replacing = true;
-        }
-        else if (prevState == regexExtraState)
-            isQuotingOperator = true;
-    }
-    else
-    {
-        startIndex = text.indexOf (rExp, startIndex, &startMatch);
-        /* skip comments and quotations (all formatted to this point) */
-        fi = format (startIndex);
-        while (startIndex >= 0
-               && (isEscapedPerlRegex (text, startIndex)
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            /* search from the next position, without considering
-               the captured length, because "/" might match later */
-            startIndex = text.indexOf (rExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-        if (startIndex >= 0)
-        {
-            delimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
-            if (startMatch.capturedLength() > 1)
-            {
-                if (text.at (startIndex) == 'q' && text.at (startIndex + 1) != 'r')
-                    isQuotingOperator = true;
-                else if (text.at (startIndex) == 's' || text.at (startIndex) == 't' || text.at (startIndex) == 'y')
-                    ro = true;
-                /* use flagFormat for operators too */
-                setFormat (startIndex, startMatch.capturedLength() - 1, flagFormat);
-            }
-        }
-    }
-
-    while (startIndex >= 0)
-    {
-        /* continued from the previous line? */
-        bool continued (startIndex == 0
-                        && (prevState == regexState
-                            || prevState == regexExtraState
-                            || prevState == regexSearchState));
-
-        endExp.setPattern ("\\" + getEndDelimiter (delimStr));
-        int endLength;
-        int endIndex = findDelimiter (text,
-                                      continued
-                                          ? -1 // to know that the search is continued from the previous line
-                                          : startIndex + startMatch.capturedLength(),
-                                      endExp,
-                                      endLength);
-
-        int indx = continued ? 0 : startIndex + startMatch.capturedLength();
-        while (isEscapedRegexEndSign (text, indx, endIndex, replacing || isQuotingOperator))
-            endIndex = findDelimiter (text, endIndex + 1, endExp, endLength);
-
-        int len;
-        int keywordLength = qMax (startMatch.capturedLength() - 1, 0);
-        if (endIndex == -1)
-        {
-            if (!continued)
-            {
-                if (ro && !replacing)
-                    setCurrentBlockState (regexSearchState);
-                else
-                    setCurrentBlockState (isQuotingOperator ? regexExtraState : regexState);
-            }
-            else
-                setCurrentBlockState (prevState);
-
-            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo (ro ? "r" + delimStr : delimStr);
-            /* NOTE: The next block will be rehighlighted at highlightBlock()
-                     (-> multiLineRegex (text, 0);) if the delimiter is changed. */
-
-            len = text.length() - startIndex;
-        }
-        else // endIndex is found
-        {
-            len = endIndex - startIndex + endLength;
-
-            if (continued)
-            {
-                if (prevState == regexSearchState)
-                {
-                    replacing = true;
-                    setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
-                    QString ed = getEndDelimiter (delimStr);
-                    if (ed != delimStr) // regex replacement with braces
-                    {
-                        /* find the start of the replacement part */
-                        startIndex = text.indexOf (QRegularExpression ("\\" + delimStr), endIndex + 1, &startMatch);
-                        if (startIndex == -1)
-                        { // the line ends between search and replacement
-                            setFormat (endIndex + 1, text.length() - endIndex - 1, regexFormat);
-                            setCurrentBlockState (regexState);
-                            /* the prefix "b" distinguishes this state */
-                            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b" + delimStr);
-                            return;
-                        }
-                        setFormat (endIndex + 1, startIndex + startMatch.capturedLength() - endIndex - 1, regexFormat);
-                    }
-                    else
-                    {
-                        startMatch = QRegularExpressionMatch();
-                        startIndex = endIndex + 1;
-                    }
-                    continue;
-                }
-                // otherwise, the end delimiter of a simple operator or replacement part has been found
-            }
-            else
-            {
-                if (ro && !replacing)
-                {
-                    replacing = true;
-                    setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
-                    QString ed = getEndDelimiter (delimStr);
-                    if (ed != delimStr) // regex replacement with braces
-                    {
-                        /* find the start of the replacement part */
-                        startIndex = text.indexOf (QRegularExpression ("\\" + delimStr), endIndex + 1, &startMatch);
-                        if (startIndex == -1)
-                        { // the line ends between search and replacement
-                            setFormat (endIndex + 1, text.length() - endIndex - 1, regexFormat);
-                            setCurrentBlockState (regexState);
-                            /* the prefix "b" distinguishes this state */
-                            static_cast<TextBlockData *>(currentBlock().userData())->insertInfo ("b" + delimStr);
-                            return;
-                        }
-                        setFormat (endIndex + 1, startIndex + startMatch.capturedLength() - endIndex - 1, regexFormat);
-                    }
-                    else // regex replacement with a middle delimiter
-                    {
-                        startMatch = QRegularExpressionMatch();
-                        startIndex = endIndex + 1;
-                    }
-                    continue;
-                }
-                // otherwise, the end delimiter of a simple operator or replacement part has been found
-            }
-        }
-        setFormat (startIndex + keywordLength, len - keywordLength, regexFormat);
-
-        /* format flags too */
-        if (text.mid (startIndex + len).indexOf (QRegularExpression ("^[sgimx]+"), 0, &startMatch) == 0)
-            setFormat (startIndex + len, startMatch.capturedLength(), flagFormat);
-
-        /* start searching for a new regex (operator) */
-        isQuotingOperator = false;
-        ro = false;
-        replacing = false;
-        startIndex = text.indexOf (rExp, startIndex + len, &startMatch);
-        /* skip comments and quotations again */
-        fi = format (startIndex);
-        while (startIndex >= 0
-               && (isEscapedPerlRegex (text, startIndex)
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            startIndex = text.indexOf (rExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-        if (startIndex >= 0)
-        {
-            delimStr = QString (text.at (startIndex + startMatch.capturedLength() - 1));
-            if (startMatch.capturedLength() > 1)
-            {
-                if (text.at (startIndex) == 'q' && text.at (startIndex + 1) != 'r')
-                    isQuotingOperator = true;
-                else if (text.at (startIndex) == 's' || text.at (startIndex) == 't' || text.at (startIndex) == 'y')
-                    ro = true;
-                setFormat (startIndex, startMatch.capturedLength() - 1, flagFormat);
-            }
-        }
-    }
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter-regex.cpp featherpad-1.0.1/featherpad/highlighter-regex.cpp
--- featherpad-0.17.1/featherpad/highlighter-regex.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-regex.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,431 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2018-2020 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-// This is only for the starting "/".
-bool Highlighter::isEscapedRegex (const QString &text, const int pos)
-{
-    if (progLan == "perl") return isEscapedPerlRegex (text, pos);
-
-    if (pos < 0) return false;
-    if (progLan != "javascript" && progLan != "qml")
-        return false;
-
-    if (format (pos) == quoteFormat || format (pos) == altQuoteFormat
-        || format (pos) == commentFormat || format (pos) == urlFormat)
-    {
-        return true;
-    }
-
-    if (isMLCommented (text, pos, commentState)
-        || isMLCommented (text, pos, htmlJavaCommentState))
-    {
-        return true;
-    }
-
-    /* escape "<.../>", "</...>" and the single-line comment sign ("//")
-       FIXME: In this way and with what follows, "/>/g" isn't highlighted. */
-    if ((text.length() > pos + 1 && ((progLan == "javascript" && text.at (pos + 1) == '>')
-                                     || text.at (pos + 1) == '/'))
-        || (pos > 0 && progLan == "javascript" && text.at (pos - 1) == '<'))
-    {
-        return true;
-    }
-
-    QRegularExpressionMatch keyMatch;
-    static QRegularExpression jsKeys, qmlKeys;
-
-    int i = pos - 1;
-    while (i >= 0 && (text.at (i) == ' ' || text.at (i) == '\t'))
-        --i;
-    if (i == -1) // examine the previous line(s)
-    {
-        /* NOTE: regexExtraState is already applied to:
-                 1) Single-line comments;
-                 2) Lines ending with single/double quotations
-                    but without end quote; and
-                 3) Lines ending with regex plus spaces. */
-        QTextBlock prev = currentBlock().previous();
-        if (!prev.isValid()) return false;
-        QString txt = prev.text();
-        QRegularExpression nonSpace ("[^\\s]+");
-        while (txt.indexOf (nonSpace, 0) == -1)
-        {
-            if (prev.userState() == regexExtraState)
-            { // a quoted line with only witespaces (backslashed mutil-line quote)
-                return false;
-            }
-            prev.setUserState (updateState); // update the next line if this one changes
-            prev = prev.previous();
-            if (!prev.isValid()) return false;
-            txt = prev.text();
-        }
-        int last = txt.length() - 1;
-        QChar ch = txt.at (last);
-        while (ch == ' ' || ch == '\t')
-        {
-            --last;
-            ch = txt.at (last);
-        }
-        if (prev.userState() == regexExtraState)
-        {
-            /* a regex isn't escaped if it follows another one,
-               a single-line comment or a quotation (without an end quote) */
-            return false;
-        }
-        else
-        {
-            prev.setUserState (updateState); // update the next line if this one changes
-            if (ch.isNumber() || ch == '_'
-                /* as with Kate */
-                || ch == ')' || ch == ']' || ch == '$' || ch == '\"' || ch == '\'' || ch == '`'
-                /* also skip "/>" */
-                || (last > 0 && ch == '>' && txt.at (last - 1) == '/' && progLan == "javascript"))
-            {
-                return true;
-            }
-            if (ch.isLetter())
-            { // a regex isn't escaped if it follows a JavaScript keyword
-                if (progLan == "javascript")
-                {
-                    if (jsKeys.pattern().isEmpty())
-                        jsKeys.setPattern (keywords (progLan).join ('|'));
-                }
-                else
-                {
-                    if (qmlKeys.pattern().isEmpty())
-                        qmlKeys.setPattern (keywords (progLan).join ('|'));
-                }
-                int len = qMin (12, last + 1);
-                QString str = txt.mid (last - len + 1, len);
-                int j;
-                if ((j = str.lastIndexOf (progLan == "javascript" ? jsKeys : qmlKeys, -1, &keyMatch)) > -1
-                    && j + keyMatch.capturedLength() == len)
-                {
-                    return false;
-                }
-                return true;
-            }
-        }
-    }
-    else
-    { // a regex isn't escaped if it follows another one or a JavaScript keyword
-        if (format (i) == regexFormat)
-            return false;
-        QChar ch = text.at (i);
-        if (/* as with Kate */
-            ch == ')' || ch == ']' || ch == '$' || ch == '\"' || ch == '\'' || ch == '`'
-            /* also skip "/>" */
-            || (i > 0 && ch == '>' && text.at (i - 1) == '/' && progLan == "javascript"))
-        {
-            return true;
-        }
-        if (ch.isLetterOrNumber() || ch == '_')
-        {
-            int j;
-            if ((j = text.lastIndexOf (QRegularExpression("/\\w+"), i + 1, &keyMatch)) > -1
-                && j + keyMatch.capturedLength() == i + 1 && format (j) == regexFormat)
-            {
-                return false;
-            }
-            if (ch.isLetter())
-            {
-                if (progLan == "javascript")
-                {
-                    if (jsKeys.pattern().isEmpty())
-                        jsKeys.setPattern (keywords (progLan).join ('|'));
-                }
-                else
-                {
-                    if (qmlKeys.pattern().isEmpty())
-                        qmlKeys.setPattern (keywords (progLan).join ('|'));
-                }
-                int len = qMin (12, i + 1);
-                QString str = text.mid (i - len + 1, len);
-                if ((j = str.lastIndexOf (progLan == "javascript" ? jsKeys : qmlKeys, -1, &keyMatch)) > -1
-                    && j + keyMatch.capturedLength() == len)
-                {
-                    return false;
-                }
-            }
-            return true;
-        }
-    }
-
-    return false;
-}
-/*************************/
-// May be used for middle signs (e.g., "/") too. FIXME: Multi-line classes aren't supported.
-bool Highlighter::isEscapedRegexEndSign (const QString &text, const int start, const int pos,
-                                         bool ignoreClasses) const
-{
-    if (pos < 1) return false;
-    if (isEscapedChar (text, pos))
-        return true;
-    if (!ignoreClasses)
-    {
-        /* check if it's inside a class */
-        int i = pos - 1;
-        while (i >= start)
-        {
-            if (text.at (i) == ']' && !isEscapedChar (text, i))
-                return false;
-            if (text.at (i) == '[' && !isEscapedChar (text, i))
-                return true;
-            --i;
-        }
-    }
-    return false;
-}
-/*************************/
-// For faster processing with very long lines, this function also highlights regex patterns.
-// (It should be used with care because it gives correct results only in special places.)
-bool Highlighter::isInsideRegex (const QString &text, const int index)
-{
-    if (progLan == "perl") return isInsidePerlRegex (text, index);
-
-    if (index < 0) return false;
-    if (progLan != "javascript" && progLan != "qml")
-        return false;
-
-    int pos = -1;
-
-    if (format (index) == regexFormat)
-        return true;
-    if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-    {
-        pos = data->lastFormattedRegex() - 1;
-        if (index <= pos) return false;
-    }
-
-    QRegularExpressionMatch match;
-    QRegularExpression exp;
-    bool res = false;
-    int N;
-
-    if (pos == -1)
-    {
-        if (previousBlockState() != regexState)
-        {
-            exp.setPattern ("/");
-            N = 0;
-        }
-        else
-        {
-            exp.setPattern ("/[A-Za-z0-9_]*");
-            N = 1;
-            res = true;
-        }
-    }
-    else // a new search from the last position
-    {
-        exp.setPattern ("/");
-        N = 0;
-    }
-
-    int nxtPos;
-    while ((nxtPos = text.indexOf (exp, pos + 1, &match)) >= 0)
-    {
-        /* skip formatted comments and quotes */
-        QTextCharFormat fi = format (nxtPos);
-        if (N % 2 == 0
-            && (fi == commentFormat || fi == urlFormat
-                || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            pos = nxtPos;
-            continue;
-        }
-
-        ++N;
-        if ((N % 2 == 0 && isEscapedRegexEndSign (text, pos + 1, nxtPos)) // an escaped end sign
-            || (N % 2 != 0 && isEscapedRegex (text, nxtPos))) // or an escaped start sign
-        {
-            if (res)
-            {
-                pos = qMax (pos, 0);
-                setFormat (pos, nxtPos - pos + match.capturedLength(), regexFormat);
-            }
-            --N;
-            pos = nxtPos;
-            continue;
-        }
-
-        if (N % 2 == 0)
-        {
-            if (TextBlockData *data = static_cast<TextBlockData *>(currentBlock().userData()))
-                data->insertLastFormattedRegex (nxtPos + match.capturedLength());
-            pos = qMax (pos, 0);
-            setFormat (pos, nxtPos - pos + match.capturedLength(), regexFormat);
-        }
-
-        if (index <= nxtPos) // they may be equal, as when "//" is at the end of "/...//"
-        {
-            if (N % 2 == 0) res = true;
-            else res = false;
-            break;
-        }
-
-        if (N % 2 == 0)
-        {
-            exp.setPattern ("/");
-            res = false;
-        }
-        else
-        {
-            exp.setPattern ("/[A-Za-z0-9_]*");
-            res = true;
-        }
-
-        pos = nxtPos;
-    }
-
-    return res;
-}
-/*************************/
-void Highlighter::multiLineRegex(const QString &text, const int index)
-{
-    if (progLan == "perl")
-    {
-        multiLinePerlRegex (text);
-        return;
-    }
-
-    if (index < 0) return;
-    if (progLan != "javascript" && progLan != "qml")
-        return;
-
-    int prevState = previousBlockState();
-
-    if (index == 0 && prevState == -1 && text.startsWith ("#!"))
-    { // a special case at the start of the first line (hash-bang)
-        setFormat (0, text.length(), commentFormat);
-        return;
-    }
-
-    int startIndex = index;
-    QRegularExpressionMatch startMatch;
-    QRegularExpression startExp ("/");
-    QRegularExpressionMatch endMatch;
-    QRegularExpression endExp ("/[A-Za-z0-9_]*");
-    QTextCharFormat fi;
-
-    if (prevState != regexState || startIndex > 0)
-    {
-        startIndex = text.indexOf (startExp, startIndex, &startMatch);
-        /* skip comments and quotations (all formatted to this point) */
-        fi = format (startIndex);
-        while (startIndex >= 0
-               && (isEscapedRegex (text, startIndex)
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            startIndex = text.indexOf (startExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-    }
-
-    while (startIndex >= 0)
-    {
-        int endIndex, indx;
-        /* when the start sign is in the prvious line
-           and the search for the end sign has just begun,
-           search for the end sign from the line start */
-        if (prevState == regexState && startIndex == 0)
-        {
-            indx = 0;
-            endIndex = text.indexOf (endExp, 0, &endMatch);
-        }
-        else
-        {
-            indx = startIndex + startMatch.capturedLength();
-            endIndex = text.indexOf (endExp, indx, &endMatch);
-        }
-
-        while (isEscapedRegexEndSign (text, indx, endIndex))
-            endIndex = text.indexOf (endExp, endIndex + 1, &endMatch);
-
-        int badIndex = -1;
-        int len;
-        if (endIndex == -1)
-        {
-            setCurrentBlockState (regexState);
-            len = text.length() - startIndex;
-        }
-        else
-        {
-            len = endIndex - startIndex
-                  + endMatch.capturedLength();
-            /* a multi-line comment start sign may have become invalid */
-            if (!commentStartExpression.pattern().isEmpty())
-            {
-                QRegularExpression commentExp ("^" + commentStartExpression.pattern());
-                if (text.mid (endIndex).indexOf (commentExp) == 0)
-                {
-                    badIndex = endIndex + endMatch.capturedLength();
-                    setFormat (badIndex, text.length() - badIndex, neutralFormat);
-                    setCurrentBlockState (0); // restore the neutral state
-                }
-            }
-        }
-        setFormat (startIndex, len, regexFormat);
-
-        startIndex = text.indexOf (startExp, startIndex + len, &startMatch);
-
-        if (badIndex >= 0)
-        { // reformat from here, as in highlightBlock()
-            singleLineComment (text, badIndex);
-            multiLineQuote (text, badIndex); // always returns false
-            multiLineComment (text, badIndex, commentStartExpression, commentEndExpression, commentState, commentFormat);
-        }
-
-        /* skip comments and quotations again */
-        fi = format (startIndex);
-        while (startIndex >= 0
-               && (isEscapedRegex (text, startIndex)
-                   || fi == commentFormat || fi == urlFormat
-                   || fi == quoteFormat || fi == altQuoteFormat || fi == urlInsideQuoteFormat))
-        {
-            startIndex = text.indexOf (startExp, startIndex + 1, &startMatch);
-            fi = format (startIndex);
-        }
-    }
-
-    /* If this line ends with a regex plus spaces, give it a special
-       state to decide about the probable regex of its following line
-       and also for that line to be updated when this state is toggled.
-       See isEscapedRegex(). */
-    if (currentBlockState() == 0 && !text.isEmpty())
-    {
-        int last = text.length() - 1;
-        QChar ch = text.at (last);
-        while (ch == ' ' || ch == '\t')
-        {
-            --last;
-            if (last < 0) return;
-            ch = text.at (last);
-        }
-        if (format (last) == regexFormat)
-            setCurrentBlockState (regexExtraState);
-    }
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/highlighter-sh.cpp featherpad-1.0.1/featherpad/highlighter-sh.cpp
--- featherpad-0.17.1/featherpad/highlighter-sh.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/highlighter-sh.cpp	1970-01-01 01:00:00.000000000 +0100
@@ -1,479 +0,0 @@
-/*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
- *
- * FeatherPad is free software: you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * FeatherPad is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
- */
-
-#include "highlighter.h"
-
-namespace FeatherPad {
-
-// multi/single-line quote highlighting for bash.
-void Highlighter::SH_MultiLineQuote (const QString &text)
-{
-    int index = 0;
-    QRegularExpressionMatch quoteMatch;
-    QRegularExpression quoteExpression = mixedQuoteMark;
-    int initialState = currentBlockState();
-    int prevState = previousBlockState();
-
-    bool wasDQuoted (prevState == doubleQuoteState
-                     || prevState == SH_MixedDoubleQuoteState || prevState == SH_MixedSingleQuoteState);
-    bool wasQuoted (wasDQuoted || prevState == singleQuoteState);
-    QTextBlock prevBlock = currentBlock().previous();
-    TextBlockData *prevData = nullptr;
-    if (prevBlock.isValid())
-    {
-        prevData = static_cast<TextBlockData *>(prevBlock.userData());
-        if (prevData && prevData->getProperty())
-        { // at the end delimiter of a here-doc starting like VAR="$(cat<<EOF
-            wasQuoted = wasDQuoted = true;
-        }
-    }
-
-    TextBlockData *curData = static_cast<TextBlockData *>(currentBlock().userData());
-    int hereDocDelimPos = -1;
-    if (!curData->labelInfo().isEmpty()) // the label is delimStr
-    {
-        hereDocDelimPos = text.indexOf (hereDocDelimiter);
-        while (hereDocDelimPos > -1 && isQuoted (text, hereDocDelimPos, true))
-        { // see isHereDocument()
-            hereDocDelimPos = text.indexOf (hereDocDelimiter, hereDocDelimPos + 2);
-        }
-    }
-
-    /* find the start quote */
-    if (!wasQuoted)
-    {
-        index = text.indexOf (quoteExpression);
-        /* skip escaped start quotes and all comments */
-        while (SH_SkipQuote (text, index, true))
-            index = text.indexOf (quoteExpression, index + 1);
-
-        /* check if the first quote is after the here-doc start delimiter */
-        if (index >= 0 && hereDocDelimPos > -1 && index > hereDocDelimPos)
-            index = -1;
-
-        /* if the start quote is found... */
-        if (index >= 0)
-        {
-            /* ... distinguish between double and single quotes */
-            if (text.at (index) == quoteMark.pattern().at (0))
-                quoteExpression = quoteMark;
-            else
-                quoteExpression.setPattern ("\'");
-        }
-    }
-    else // but if we're inside a quotation
-    {
-        /* ... distinguish between the two quote kinds
-           by checking the previous line */
-        if (wasDQuoted)
-            quoteExpression = quoteMark;
-        else
-            quoteExpression.setPattern ("\'");
-    }
-
-    while (index >= 0)
-    {
-        /* if the search is continued... */
-        if (quoteExpression == mixedQuoteMark)
-        {
-            /* ... distinguish between double and single quotes
-               again because the quote mark may have changed */
-            if (text.at (index) == quoteMark.pattern().at (0))
-                quoteExpression = quoteMark;
-            else
-                quoteExpression.setPattern ("\'");
-        }
-
-        int endIndex;
-        /* if there's no start quote ... */
-        if (index == 0 && wasQuoted)
-        {
-            /* ... search for the end quote from the line start */
-            endIndex = text.indexOf (quoteExpression, 0, &quoteMatch);
-        }
-        else // otherwise, search for the end quote from the start quote
-            endIndex = text.indexOf (quoteExpression, index + 1, &quoteMatch);
-
-        /* check if the end quote is escaped */
-        while (SH_SkipQuote (text, endIndex, false))
-            endIndex = text.indexOf (quoteExpression, endIndex + 1, &quoteMatch);
-
-        int quoteLength;
-        if (endIndex == -1)
-        {
-            if (quoteExpression != quoteMark || hereDocDelimPos == -1)
-            {
-                setCurrentBlockState (quoteExpression == quoteMark
-                                                         ? initialState == SH_DoubleQuoteState
-                                                           ? SH_MixedDoubleQuoteState
-                                                           : initialState == SH_SingleQuoteState
-                                                             ? SH_MixedSingleQuoteState
-                                                             : doubleQuoteState
-                                                         : singleQuoteState);
-            }
-            else if (curData->openNests() > 0) // like VAR="$(cat<<EOF
-                curData->setProperty (true); // initialState is always that of here-doc
-            quoteLength = text.length() - index;
-        }
-        else
-        {
-            quoteLength = endIndex - index
-                          + quoteMatch.capturedLength(); // 1
-        }
-        if (quoteExpression == quoteMark)
-            setFormatWithoutOverwrite (index, quoteLength, quoteFormat, neutralFormat);
-        else
-            setFormat (index, quoteLength, altQuoteFormat);
-
-        QString str = text.mid (index, quoteLength);
-        int urlIndex = 0;
-        QRegularExpressionMatch urlMatch;
-        while ((urlIndex = str.indexOf (urlPattern, urlIndex, &urlMatch)) > -1)
-        {
-             setFormat (urlIndex + index, urlMatch.capturedLength(), urlInsideQuoteFormat);
-             urlIndex += urlMatch.capturedLength();
-        }
-
-        /* the next quote may be different */
-        quoteExpression = mixedQuoteMark;
-        index = text.indexOf (quoteExpression, index + quoteLength);
-
-        /* skip escaped start quotes and all comments */
-        while (SH_SkipQuote (text, index, true))
-            index = text.indexOf (quoteExpression, index + 1);
-
-        /* check if the first quote is after the here-doc start delimiter */
-        if (hereDocDelimPos > -1 && index > hereDocDelimPos)
-            index = -1;
-    }
-}
-/*************************/
-// The bash quotes that should be skipped while multiline quotes are being highlighted.
-bool Highlighter::SH_SkipQuote (const QString &text, const int pos, bool isStartQuote)
-{
-    if (isEscapedQuote (text, pos, isStartQuote))
-        return true;
-    QTextCharFormat fi = format (pos);
-    return (fi == neutralFormat // not needed
-            || fi == commentFormat
-            || fi == urlFormat
-            || fi == quoteFormat
-            || fi == altQuoteFormat
-            || fi == urlInsideQuoteFormat);
-}
-/*************************/
-// Formats the text inside a command substitution variable character by character,
-// considering single and double quotes, code block start and end, and comments.
-int Highlighter::formatInsideCommand (const QString &text,
-                                      const int minOpenNests, int &nests, QSet<int> &quotes,
-                                      const bool isHereDocStart, const int index)
-{
-    int p = 0;
-    int indx = index;
-    bool doubleQuoted (quotes.contains (nests));
-    bool comment (false);
-    int initialOpenNests = nests;
-    while (nests > minOpenNests && indx < text.length())
-    {
-        while (format (indx) == commentFormat)
-            ++ indx;
-        if (indx == text.length())
-            break;
-        const QChar c = text.at (indx);
-        if (c == '\'')
-        {
-            if (comment)
-            {
-                setFormat (indx, 1, commentFormat);
-                ++ indx;
-            }
-            else
-            {
-                if (doubleQuoted)
-                {
-                    setFormat (indx, 1, quoteFormat);
-                    ++ indx;
-                }
-                else if (isEscapedQuote (text, indx, true))
-                    ++ indx;
-                else
-                {
-                    QRegularExpression singleQuoteExp ("\'");
-                    int end = text.indexOf (singleQuoteExp, indx + 1);
-                    while (isEscapedQuote (text, end, false))
-                        end = text.indexOf (singleQuoteExp, end + 1);
-                    if (end == -1)
-                    {
-                        setFormat (indx, text.length() - indx, altQuoteFormat);
-                        if (!isHereDocStart)
-                            setCurrentBlockState (SH_SingleQuoteState);
-                        indx = text.length();
-                    }
-                    else
-                    {
-                        setFormat (indx, end + 1 - indx, altQuoteFormat);
-                        indx = end + 1;
-                    }
-                }
-            }
-        }
-        else if (c == '\"')
-        {
-            if (comment)
-                setFormat (indx, 1, commentFormat);
-            else if (!isEscapedQuote (text, indx, true))
-            {
-                doubleQuoted = !doubleQuoted;
-                setFormat (indx, 1, quoteFormat);
-            }
-            ++ indx;
-        }
-        else if (c == '$') // may start a new code block
-        {
-            if (comment)
-            {
-                setFormat (indx, 1, commentFormat);
-                ++ indx;
-            }
-            else
-            {
-                if (text.mid (indx, 2) == "$(")
-                {
-                    setFormat (indx, 2, neutralFormat);
-
-                    int Nests = nests + 1;
-                    indx = formatInsideCommand (text,
-                                                nests, Nests, quotes,
-                                                isHereDocStart, indx + 2);
-                    nests = Nests;
-                }
-                else
-                {
-                    if (doubleQuoted)
-                        setFormat (indx, 1, quoteFormat);
-                    else
-                        setFormat (indx, 1, neutralFormat);
-                    ++ indx;
-                }
-            }
-        }
-        else if (c == '(')
-        {
-            if (doubleQuoted)
-                setFormat (indx, 1, quoteFormat);
-            else
-            {
-                if (comment)
-                    setFormat (indx, 1, commentFormat);
-                else
-                    setFormat (indx, 1, neutralFormat);
-                if (!isEscapedChar (text, indx))
-                    ++ p;
-            }
-            ++ indx;
-        }
-        else if (c == ')') // may end a code block
-        {
-            if (doubleQuoted)
-                setFormat (indx, 1, quoteFormat);
-            else
-            {
-                if (!isEscapedChar (text, indx))
-                {
-                    -- p;
-                    if (p < 0)
-                    {
-                        setFormat (indx, 1, neutralFormat); // never commented
-                        quotes.remove (initialOpenNests);
-                        -- nests;
-                        initialOpenNests = nests;
-                        doubleQuoted = quotes.contains (nests);
-                        p = 0;
-                    }
-                    else if (comment)
-                        setFormat (indx, 1, commentFormat);
-                    else
-                        setFormat (indx, 1, neutralFormat);
-                }
-                else if (comment)
-                    setFormat (indx, 1, commentFormat);
-                else
-                    setFormat (indx, 1, neutralFormat);
-            }
-            ++ indx;
-        }
-        else if (c == '#') // may be comment sign
-        {
-            if (comment)
-                setFormat (indx, 1, commentFormat);
-            else if (doubleQuoted)
-                setFormat (indx, 1, quoteFormat);
-            else
-            {
-                if (indx == 0)
-                {
-                    comment = true;
-                    setFormat (indx, 1, commentFormat);
-                }
-                else
-                {
-                    if (text.at (indx - 1) == QChar (QChar::Space))
-                    {
-                        comment = true;
-                        setFormat (indx, 1, commentFormat);
-                    }
-                    else
-                        setFormat (indx, 1, neutralFormat);
-                }
-            }
-            ++ indx;
-        }
-        else // any non-special character
-        {
-            if (comment)
-                setFormat (indx, 1, commentFormat);
-            else if (doubleQuoted)
-                setFormat (indx, 1, quoteFormat);
-            else
-                setFormat (indx, 1, neutralFormat);
-            ++ indx;
-        }
-    }
-
-    if (nests < minOpenNests) nests = minOpenNests; // impossible
-    /* save the states */
-    if (doubleQuoted)
-    {
-        if (!isHereDocStart
-            /* an open subcommand may have already set the state */
-            && currentBlockState() != SH_SingleQuoteState)
-        { // FIXME: This state is redundant. remove it later!
-            setCurrentBlockState (SH_DoubleQuoteState);
-        }
-        quotes.insert (initialOpenNests);
-    }
-    else
-        quotes.remove (initialOpenNests);
-    return indx;
-}
-/*************************/
-// This function highlights command substitution variables $(...).
-bool Highlighter::SH_CmndSubstVar (const QString &text,
-                                   TextBlockData *currentBlockData,
-                                   int oldOpenNests, const QSet<int> &oldOpenQuotes)
-{
-    if (progLan != "sh" || !currentBlockData) return false;
-
-    int prevState = previousBlockState();
-    int curState = currentBlockState();
-    bool isHereDocStart = (curState < -1 || curState >= endState);
-
-    int N = 0;
-    QSet<int> Q;
-    QTextBlock prevBlock = currentBlock().previous();
-    /* get the data about open nests and their (double) quotes */
-    if (prevBlock.isValid())
-    {
-       if (TextBlockData *prevData = static_cast<TextBlockData *>(prevBlock.userData()))
-       {
-            N = prevData->openNests();
-            Q = prevData->openQuotes();
-       }
-    }
-
-    int indx = 0; int end = 0;
-
-    if (N > 0 && (prevState == SH_SingleQuoteState
-                  || prevState == SH_DoubleQuoteState
-                  || prevState == SH_MixedDoubleQuoteState
-                  || prevState == SH_MixedSingleQuoteState))
-    { // there was an unclosed quote in the previous block
-        if (prevState == SH_SingleQuoteState
-            || prevState == SH_MixedSingleQuoteState)
-        {
-            QRegularExpression quoteExpression ("\'");
-            end = text.indexOf (quoteExpression);
-            while (isEscapedQuote (text, end, false))
-                end = text.indexOf (quoteExpression, end + 1);
-            if (end == -1)
-            {
-                setFormat (0, text.length(), altQuoteFormat);
-                if (!isHereDocStart)
-                    setCurrentBlockState (SH_SingleQuoteState);
-                goto FINISH;
-            }
-            else
-            {
-                setFormat (0, end + 1, altQuoteFormat);
-                indx = end + 1;
-            }
-        }
-        // else there's an open double quote, about which we know
-    }
-    else if (N == 0
-             || prevState < SH_DoubleQuoteState
-             || prevState > SH_MixedSingleQuoteState)
-    {
-        if (N > 0) // there was an unclosed code block
-            indx = 0;
-        // else search for "$(" below
-    }
-
-    while (indx < text.length())
-    {
-        if (N == 0)
-        { // search for the first code block (after the previous one is closed)
-            static const QRegularExpression codeBlockStart ("\\$\\(");
-            int start = text.indexOf (codeBlockStart, indx);
-            if (start == -1 || format (start) == commentFormat)
-                goto FINISH;
-            else
-            { // a new code block
-                ++ N;
-                indx = start + 2;
-                setFormat (start, 2, neutralFormat);
-            }
-        }
-        indx = formatInsideCommand (text,
-                                    0, N, Q,
-                                    isHereDocStart, indx);
-    }
-
-FINISH:
-    if (!Q.isEmpty())
-        currentBlockData->insertOpenQuotes (Q);
-    if (N > 0)
-    {
-        currentBlockData->insertNestInfo (N);
-        if (isHereDocStart)
-        {
-            /* change the state to reflect the number of open code blocks
-               (the open quotes info is considered at highlightBlock())*/
-            curState > 0 ? curState += 2*(N + 3) : curState -= 2*(N + 3); // see isHereDocument()
-            setCurrentBlockState (curState);
-        }
-    }
-    if (N != oldOpenNests || Q != oldOpenQuotes)
-    { // forced highlighting of the next block is necessary
-        return true;
-    }
-    else return false;
-}
-
-}
diff -Nru featherpad-0.17.1/featherpad/lineedit.cpp featherpad-1.0.1/featherpad/lineedit.cpp
--- featherpad-0.17.1/featherpad/lineedit.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/lineedit.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -39,7 +39,7 @@
 /*************************/
 void LineEdit::keyPressEvent (QKeyEvent *event)
 {
-    /* because of a bug in Qt5, the non-breaking space (ZWNJ) isn't inserted with SHIFT+SPACE */
+    /* because of a bug in Qt, the non-breaking space (ZWNJ) may not be inserted with SHIFT+SPACE */
     if (event->key() == 0x200c)
     {
         insert (QChar (0x200C));
diff -Nru featherpad-0.17.1/featherpad/loading.cpp featherpad-1.0.1/featherpad/loading.cpp
--- featherpad-0.17.1/featherpad/loading.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/loading.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -99,6 +99,7 @@
             charset_ = "UTF-16"; // single character
         else if (num == 4)
         {
+            bool readMore (true);
             if (hasNull)
             {
                 if ((C[0] == 0xFF && C[1] == 0xFE && C[2] != '\0' && C[3] == '\0') // le
@@ -116,55 +117,73 @@
                     charset_ = "UTF-32";
                 }
             }
-            /* reading may still be possible */
-            if (charset_.isEmpty() && !hasNull)
-            {
-                num = 5; // 4 characters are already read
-                while (file.read (&c, charSize) > 0)
+            else if ((C[0] == 0xFF && C[1] == 0xFE) || (C[0] == 0xFE && C[1] == 0xFF))
+            { // check special cases of UTF-16
+                while (num < 8 && file.read (&c, charSize) > 0)
                 {
+                    data.append (c);
                     if (c == '\0')
+                        hasNull = true;
+                    ++ num;
+                }
+                if (hasNull && (num == 6 || num == 8))
+                    charset_ = "UTF-16";
+                if (num < 8)
+                    readMore = false;
+            }
+
+            if (readMore)
+            {
+                /* reading may still be possible */
+                if (charset_.isEmpty() && !hasNull)
+                {
+                    ++ num; // 4 or 8 characters are already read
+                    while (file.read (&c, charSize) > 0)
                     {
-                        if (!hasNull)
+                        if (c == '\0')
                         {
-                            if (skipNonText_)
+                            if (!hasNull)
                             {
-                                file.close();
-                                emit completed (QString(), QString(), "UTF-8"); // shows that a non-text file is skipped
-                                return;
+                                if (skipNonText_)
+                                {
+                                    file.close();
+                                    emit completed (QString(), QString(), "UTF-8"); // shows that a non-text file is skipped
+                                    return;
+                                }
+                                hasNull = true;
                             }
-                            hasNull = true;
                         }
+                        else if (c == '\n' || c == '\r')
+                            num = 0;
+                        if (num <= 500000)
+                            data.append (c);
+                        else if (num == 500001)
+                        {
+                            data += QByteArray ("    HUGE LINE TRUNCATED: NO LINE WITH MORE THAN 500000 CHARACTERS");
+                            forceUneditable_ = true;
+                        }
+                        ++num;
                     }
-                    else if (c == '\n' || c == '\r')
-                        num = 0;
-                    if (num <= 500000)
-                        data.append (c);
-                    else if (num == 500001)
+                }
+                else
+                { // the meaning of null characters was determined before
+                    if (skipNonText_ && hasNull && charset_.isEmpty())
                     {
-                        data += QByteArray ("    HUGE LINE TRUNCATED: NO LINE WITH MORE THAN 500000 CHARACTERS");
-                        forceUneditable_ = true;
+                        file.close();
+                        emit completed (QString(), QString(), "UTF-8");
+                        return;
+                    }
+                    num = 0;
+                    while (file.read (&c, charSize) > 0)
+                    {
+                        if (c == '\n' || c == '\r')
+                            num = 0;
+                        if (num < 500004) // a multiple of 4 (for UTF-16/32)
+                            data.append (c);
+                        else
+                            forceUneditable_ = true;
+                        ++num;
                     }
-                    ++num;
-                }
-            }
-            else
-            { // the meaning of null characters was determined before
-                if (skipNonText_ && hasNull && charset_.isEmpty())
-                {
-                    file.close();
-                    emit completed (QString(), QString(), "UTF-8");
-                    return;
-                }
-                num = 0;
-                while (file.read (&c, charSize) > 0)
-                {
-                    if (c == '\n' || c == '\r')
-                        num = 0;
-                    if (num < 500004) // a multiple of 4 (for UTF-16/32)
-                        data.append (c);
-                    else
-                        forceUneditable_ = true;
-                    ++num;
                 }
             }
         }
diff -Nru featherpad-0.17.1/featherpad/main.cpp featherpad-1.0.1/featherpad/main.cpp
--- featherpad-0.17.1/featherpad/main.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/main.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -43,7 +43,7 @@
 int main (int argc, char **argv)
 {
     const QString name = "FeatherPad";
-    const QString version = "0.17.1";
+    const QString version = "1.0.1";
     const QString option = QString::fromUtf8 (argv[1]);
     if (option == "--help" || option == "-h")
     {
diff -Nru featherpad-0.17.1/featherpad/pref.cpp featherpad-1.0.1/featherpad/pref.cpp
--- featherpad-0.17.1/featherpad/pref.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/pref.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -124,6 +124,7 @@
     pastePaths_ = config.getPastePaths();
     whiteSpaceValue_ = config.getWhiteSpaceValue();
     curLineHighlight_ = config.getCurLineHighlight();
+    disableMenubarAccel_ = config.getDisableMenubarAccel();
 
     /**************
      *** Window ***
@@ -199,6 +200,9 @@
     ui->lastTabBox->setChecked (config.getCloseWithLastTab());
     connect (ui->lastTabBox, &QCheckBox::stateChanged, this, &PrefDialog::prefCloseWithLastTab);
 
+    ui->accelBox->setChecked (disableMenubarAccel_);
+    connect (ui->accelBox, &QCheckBox::stateChanged, this, &PrefDialog::disableMenubarAccel);
+
     /************
      *** Text ***
      ************/
@@ -567,6 +571,7 @@
              || (vLineDistance_ * config.getVLineDistance() < 0
                  || (vLineDistance_ > 0 && vLineDistance_ != config.getVLineDistance()))
              || whiteSpaceValue_ != config.getWhiteSpaceValue()
+             || disableMenubarAccel_ != config.getDisableMenubarAccel()
              || curLineHighlight_ != config.getCurLineHighlight()
              || origSyntaxColors_ != (!config.customSyntaxColors().isEmpty()
                                           ? config.customSyntaxColors()
@@ -1027,6 +1032,7 @@
     Config& config = static_cast<FPsingleton*>(qApp)->getConfig();
     int dsitance = qMax (qMin (value, 999), 10);
     config.setVLineDistance (dsitance);
+
     showPrompt();
 }
 /*************************/
@@ -1801,5 +1807,16 @@
                                          || config.getCurLineHighlight() != -1);
     showPrompt();
 }
+/*************************/
+void PrefDialog::disableMenubarAccel (int checked)
+{
+    Config& config = static_cast<FPsingleton*>(qApp)->getConfig();
+    if (checked == Qt::Checked)
+        config.setDisableMenubarAccel (true);
+    else if (checked == Qt::Unchecked)
+        config.setDisableMenubarAccel (false);
+
+    showPrompt();
+}
 
 }
diff -Nru featherpad-0.17.1/featherpad/prefDialog.ui featherpad-1.0.1/featherpad/prefDialog.ui
--- featherpad-0.17.1/featherpad/prefDialog.ui	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/prefDialog.ui	2021-10-15 02:56:34.000000000 +0200
@@ -213,6 +213,17 @@
                </widget>
               </item>
               <item>
+               <widget class="QCheckBox" name="accelBox">
+                <property name="toolTip">
+                 <string>Menubar accelerators are activated by Alt
+and may interfere with customized shortcuts.</string>
+                </property>
+                <property name="text">
+                 <string>Disable menubar accelerators</string>
+                </property>
+               </widget>
+              </item>
+              <item>
                <widget class="QCheckBox" name="searchbarBox">
                 <property name="text">
                  <string>Hide search &bar by default</string>
diff -Nru featherpad-0.17.1/featherpad/pref.h featherpad-1.0.1/featherpad/pref.h
--- featherpad-0.17.1/featherpad/pref.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/pref.h	2021-10-15 02:56:34.000000000 +0200
@@ -125,6 +125,7 @@
     void changeWhitespaceValue (int value);
     void restoreDefaultSyntaxColors();
     void changeCurLineHighlight (int value);
+    void disableMenubarAccel (int checked);
 
 private:
     void closeEvent (QCloseEvent *event);
@@ -140,7 +141,7 @@
 
     Ui::PrefDialog *ui;
     QWidget * parent_;
-    bool darkBg_, showWhiteSpace_, showEndings_, saveUnmodified_, sharedSearchHistory_, selHighlighting_, pastePaths_;
+    bool darkBg_, showWhiteSpace_, showEndings_, saveUnmodified_, sharedSearchHistory_, selHighlighting_, pastePaths_, disableMenubarAccel_;
     int vLineDistance_, darkColValue_, lightColValue_, recentNumber_, textTabSize_, whiteSpaceValue_, curLineHighlight_;
     QHash<QString, QString> shortcuts_, newShortcuts_;
     QString prevtMsg_;
diff -Nru featherpad-0.17.1/featherpad/replace.cpp featherpad-1.0.1/featherpad/replace.cpp
--- featherpad-0.17.1/featherpad/replace.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/replace.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -30,11 +30,9 @@
     for (int i = 0; i < count; ++i)
     {
         TextEdit *textEdit = qobject_cast< TabPage *>(ui->tabWidget->widget (i))->textEdit();
-        QTextEdit::ExtraSelection curLineSel;
         QList<QTextEdit::ExtraSelection> es = textEdit->extraSelections();
         if (ui->actionLineNumbers->isChecked() || ui->spinBox->isVisible())
         {
-            curLineSel = textEdit->currentLineSelection();
             if (!es.isEmpty())
                 es.removeFirst();
         }
@@ -44,7 +42,8 @@
             es.removeFirst();
             --n;
         }
-        es.prepend (curLineSel);
+        if (ui->actionLineNumbers->isChecked() || ui->spinBox->isVisible())
+            es.prepend (textEdit->currentLineSelection());
         textEdit->setGreenSel (QList<QTextEdit::ExtraSelection>());
         textEdit->setExtraSelections (es);
     }
diff -Nru featherpad-0.17.1/featherpad/searchbar.cpp featherpad-1.0.1/featherpad/searchbar.cpp
--- featherpad-0.17.1/featherpad/searchbar.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/searchbar.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -31,17 +31,28 @@
 {
     if (!(event->modifiers() & Qt::ControlModifier))
     {
-        if (event->key() == Qt::Key_Up)
-        {
-            emit moveInHistory (true);
+        /* We use PageUp and PageDown like Home and End respectively
+           because the latter pair of keys are used by the line-edit
+           (while Qt uses PageUp/PageDown like Up/Down). */
+        switch (event->key()) {
+        case Qt::Key_Up:
+            emit moveInHistory (Move::MoveUp);
             event->accept();
             return;
-        }
-        if (event->key() == Qt::Key_Down)
-        {
-            emit moveInHistory (false);
+        case Qt::Key_Down:
+            emit moveInHistory (Move::MoveDown);
+            event->accept();
+            return;
+        case Qt::Key_PageUp:
+            emit moveInHistory (Move::MoveFirst);
+            event->accept();
+            return;
+        case Qt::Key_PageDown:
+            emit moveInHistory (Move::MoveLast);
             event->accept();
             return;
+        default:
+            break;
         }
     }
     QComboBox::keyPressEvent (event);
@@ -168,21 +179,33 @@
         combo_->showPopup();
     });
     /* the default behavior of up/down arrow key isn't good enough */
-    connect (combo_, &ComboBox::moveInHistory, lineEdit_, [this] (bool up) {
+    connect (combo_, &ComboBox::moveInHistory, lineEdit_, [this] (int move) {
         int count = combo_->count();
         if (count == 0) return;
-        int index = combo_->findText (lineEdit_->text(), Qt::MatchExactly);
-        if (index < 0)
-            combo_->setCurrentIndex (0);
-        else
-        {
-            if (up)
-            {
-                if (index > 0)
-                    combo_->setCurrentIndex (index - 1);
-            }
+        int index = -1;
+        switch (move) {
+        case ComboBox::Move::MoveUp:
+            index = combo_->findText (lineEdit_->text(), Qt::MatchExactly);
+            if (index < 0)
+                combo_->setCurrentIndex (0);
+            else if (index > 0)
+                combo_->setCurrentIndex (index - 1);
+            break;
+        case ComboBox::Move::MoveDown:
+            index = combo_->findText (lineEdit_->text(), Qt::MatchExactly);
+            if (index < 0)
+                combo_->setCurrentIndex (0);
             else if (index < count - 1)
                 combo_->setCurrentIndex (index + 1);
+            break;
+        case ComboBox::Move::MoveFirst:
+            combo_->setCurrentIndex (0);
+            break;
+        case ComboBox::Move::MoveLast:
+            combo_->setCurrentIndex (count - 1);
+            break;
+        default:
+            break;
         }
     });
 }
diff -Nru featherpad-0.17.1/featherpad/searchbar.h featherpad-1.0.1/featherpad/searchbar.h
--- featherpad-0.17.1/featherpad/searchbar.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/searchbar.h	2021-10-15 02:56:34.000000000 +0200
@@ -32,6 +32,8 @@
 {
     Q_OBJECT
 public:
+    enum Move {NoMove=0 , MoveUp , MoveDown , MoveFirst , MoveLast};
+
     ComboBox (QWidget *parent = nullptr) :
         QComboBox (parent), hasPopup_ (false) {}
     ~ComboBox() {}
@@ -41,7 +43,7 @@
     void hidePopup() override;
 
 signals:
-    void moveInHistory (bool up);
+    void moveInHistory (int move);
 
 protected:
     void keyPressEvent (QKeyEvent *event) override;
diff -Nru featherpad-0.17.1/featherpad/session.cpp featherpad-1.0.1/featherpad/session.cpp
--- featherpad-0.17.1/featherpad/session.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/session.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -50,9 +50,9 @@
     if (allItems_.count() > 0)
     {
         /* use ListWidgetItem to add items with a natural sorting */
-        for (const auto &irem : qAsConst (allItems_))
+        for (const auto &item : qAsConst (allItems_))
         {
-            ListWidgetItem *lwi = new ListWidgetItem (irem, ui->listWidget);
+            ListWidgetItem *lwi = new ListWidgetItem (item, ui->listWidget);
             ui->listWidget->addItem (lwi);
         }
         ui->listWidget->setCurrentRow (0);
@@ -510,9 +510,9 @@
     ui->listWidget->clear();
     QRegularExpression exp (ui->filterLineEdit->text(), QRegularExpression::CaseInsensitiveOption);
     const QStringList filtered = allItems_.filter (exp);
-    for (const auto &irem : filtered)
+    for (const auto &item : filtered)
     {
-        ListWidgetItem *lwi = new ListWidgetItem (irem, ui->listWidget);
+        ListWidgetItem *lwi = new ListWidgetItem (item, ui->listWidget);
         ui->listWidget->addItem (lwi);
     }
     /* finally, restore the selection as far as possible */
diff -Nru featherpad-0.17.1/featherpad/sidepane.cpp featherpad-1.0.1/featherpad/sidepane.cpp
--- featherpad-0.17.1/featherpad/sidepane.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/sidepane.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -34,8 +34,11 @@
     {
         int end1 = txt1.indexOf (QLatin1Char ('.'), start1);
         int end2 = txt2.indexOf (QLatin1Char ('.'), start2);
-        int comp = collator_.compare (txt1.mid(start1, end1 - start1),
-                                      txt2.mid(start2, end2 - start2));
+        QStringRef part1 = txt1.midRef (start1, end1 - start1);
+        QStringRef part2 = txt2.midRef (start2, end2 - start2);
+        int comp = collator_.compare (part1, part2);
+        if (comp == 0)
+            comp = part1.size() - part2.size(); // a workaround for QCollator's bug
         if (comp != 0)
             return comp < 0;
         if (end1 == -1 || end2 == -1)
diff -Nru featherpad-0.17.1/featherpad/singleton.cpp featherpad-1.0.1/featherpad/singleton.cpp
--- featherpad-0.17.1/featherpad/singleton.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/singleton.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -106,6 +106,11 @@
 /*************************/
 void FPsingleton::quitting()
 {
+    /* save some important info if windows aren't closed
+       (e.g., when the app is terminated by SIGTERM) */
+    for (int i = 0; i < Wins.size(); ++i)
+        Wins.at (i)->saveInfoOnTerminating (config_, i == Wins.size() - 1);
+
     if (searchModel_)
         delete searchModel_;
     config_.writeConfig();
@@ -146,7 +151,7 @@
     int waiting = 0;
     while (waiting < 5 && !localSocket.waitForConnected (timeout_))
     {
-        QThread::msleep(500);
+        QThread::msleep (500);
         localSocket.connectToServer (uniqueKey_, QIODevice::WriteOnly);
         ++ waiting;
     }
@@ -268,6 +273,12 @@
         if (!path.isEmpty()) // no empty path/name
         {
             QString realPath = path;
+#ifdef __OS2__
+            /* Check whether the file path begins with a driverletter + ':'.
+               QUrl mistakes that for a scheme. */
+            if (path.indexOf (QRegularExpression ("^[A-Za-z]:")) != -1)
+                realPath.prepend ("file:");
+#endif
             QString scheme = QUrl (realPath).scheme();
             if (scheme == "file")
                 realPath = QUrl (realPath).toLocalFile();
@@ -390,11 +401,11 @@
                 if (hasDialog) continue;
                 /* consider viewports too, so that if more than half of the width as well as the height
                    of the window is inside the current viewport (of the current desktop), open a new tab */
-                if (sr.contains (thisWin->geometry().center()))
+                if (!isX11_ || sr.contains (thisWin->geometry().center()))
                 {
                     if (d >= 0) // it may be -1 for some DEs that don't support _NET_CURRENT_DESKTOP
                     {
-                        /* first, pretend to KDE that a new window is created
+                        /* first, because of an old bug, pretend to KDE that a new window is created
                            (without this, the next new window would open on a wrong desktop) */
                         thisWin->dummyWidget->showMinimized();
                         QTimer::singleShot (0, thisWin->dummyWidget, &QWidget::close);
@@ -421,12 +432,11 @@
         if (config_.getOpenInWindows() && !filesList.isEmpty())
         {
             for (const auto &file : filesList)
-              newWin (QStringList() << file, lineNum, posInLine);
+                newWin (QStringList() << file, lineNum, posInLine);
         }
         else
             newWin (filesList, lineNum, posInLine);
     }
 }
 
-
 }
diff -Nru featherpad-0.17.1/featherpad/spellDialog.cpp featherpad-1.0.1/featherpad/spellDialog.cpp
--- featherpad-0.17.1/featherpad/spellDialog.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/spellDialog.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -26,7 +26,8 @@
 
 namespace FeatherPad {
 
-SpellDialog::SpellDialog (SpellChecker *spellChecker, const QString& word, QWidget *parent)
+SpellDialog::SpellDialog (SpellChecker *spellChecker, const QString& word,
+                          bool correction, QWidget *parent)
     : QDialog (parent), ui (new Ui::SpellDialog)
 {
     ui->setupUi (this);
@@ -50,6 +51,12 @@
     ui->addToDict->setShortcut (QKeySequence (Qt::Key_F7));
     ui->addToDict->setToolTip (QKeySequence (Qt::Key_F7).toString (QKeySequence::NativeText));
 
+    if (!correction)
+    {
+        ui->correctOnce->setEnabled (false);
+        ui->correctAll->setEnabled (false);
+    }
+
     spellChecker_ = spellChecker;
 
     connect (ui->correctOnce, &QAbstractButton::clicked, [this] {emit spellChecked (SpellAction::CorrectOnce);});
diff -Nru featherpad-0.17.1/featherpad/spellDialog.h featherpad-1.0.1/featherpad/spellDialog.h
--- featherpad-0.17.1/featherpad/spellDialog.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/spellDialog.h	2021-10-15 02:56:34.000000000 +0200
@@ -37,7 +37,8 @@
 public:
     enum SpellAction {CorrectOnce, IgnoreOnce, CorrectAll, IgnoreAll, AddToDict};
 
-    explicit SpellDialog (SpellChecker *spellChecker, const QString &word, QWidget *parent = nullptr);
+    explicit SpellDialog (SpellChecker *spellChecker, const QString &word,
+                          bool correction, QWidget *parent = nullptr);
     ~SpellDialog();
 
     SpellChecker * spellChecker() const {
diff -Nru featherpad-0.17.1/featherpad/syntax.cpp featherpad-1.0.1/featherpad/syntax.cpp
--- featherpad-0.17.1/featherpad/syntax.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/syntax.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -24,11 +24,10 @@
 
 namespace FeatherPad {
 
-static QString getMimeType (const QString &fname)
+static QMimeType getMimeType (const QFileInfo &fInfo)
 {
     QMimeDatabase mimeDatabase;
-    QMimeType mimeType = mimeDatabase.mimeTypeForFile (QFileInfo (fname));
-    return mimeType.name();
+    return mimeDatabase.mimeTypeForFile (fInfo);
 }
 /*************************/
 void FPwin::toggleSyntaxHighlighting()
@@ -53,7 +52,7 @@
         QTimer::singleShot (0, this, &FPwin::unbusy);
 }
 /*************************/
-// Never returns an empty string; falls back to "url".
+// Falls back to "url".
 void FPwin::setProgLang (TextEdit *textEdit)
 {
     if (textEdit == nullptr) return;
@@ -61,8 +60,19 @@
     QString fname = textEdit->getFileName();
     if (fname.isEmpty()) return;
 
+    /* examine the (final) target if existing */
+    QFileInfo fInfo (fname);
+    if (fInfo.isSymLink())
+    {
+        const QString finalTarget = fInfo.canonicalFilePath();
+        if (!finalTarget.isEmpty())
+            fname = finalTarget;
+        else
+            fname = fInfo.symLinkTarget();
+    }
+
     if (fname.endsWith (".sub"))
-        return;
+        return; // "url" is the default for TextEdit
 
     QString progLan;
 
@@ -84,7 +94,7 @@
             progLan = "sh";
         else if (fname.endsWith (".rb"))
             progLan = "ruby";
-        else if (fname.endsWith (".lua"))
+        else if (fname.endsWith (".lua") || fname.endsWith (".nelua"))
             progLan = "lua";
         else if (fname.endsWith (".py"))
             progLan = "python";
@@ -98,14 +108,17 @@
             progLan = "LaTeX";
         else if (fname.endsWith (".xml", Qt::CaseInsensitive) || fname.endsWith (".svg", Qt::CaseInsensitive) || fname.endsWith (".qrc")
                  || fname.endsWith (".meta4", Qt::CaseInsensitive) || fname.endsWith (".metalink", Qt::CaseInsensitive)
-                 /*|| fname.endsWith (".ui")*/ || fname.endsWith (".rdf") || fname.endsWith (".docbook") || fname.endsWith (".fnx")
+                 || fname.endsWith (".rdf") || fname.endsWith (".docbook") || fname.endsWith (".fnx")
                  || fname.endsWith (".ts") || fname.endsWith (".menu") || fname.endsWith (".kml", Qt::CaseInsensitive)
-                 || fname.endsWith (".xspf", Qt::CaseInsensitive) || fname.endsWith (".asx", Qt::CaseInsensitive))
+                 || fname.endsWith (".xspf", Qt::CaseInsensitive) || fname.endsWith (".asx", Qt::CaseInsensitive)
+                 || fname.endsWith (".nfo")/* || fname.endsWith (".ui") || fname.endsWith (".xul")*/)
             progLan = "xml";
         else if (fname.endsWith (".css") || fname.endsWith (".qss"))
             progLan = "css";
         else if (fname.endsWith (".scss"))
             progLan = "scss";
+        else if (fname.endsWith (".p") || fname.endsWith (".pas"))
+             progLan = "pascal";
         else if (fname.endsWith (".desktop") || fname.endsWith (".desktop.in") || fname.endsWith (".directory"))
              progLan = "desktop";
         else if (fname.endsWith (".kvconfig")
@@ -117,6 +130,10 @@
              progLan = "config";
         else if (fname.endsWith (".js") || fname.endsWith (".hx"))
             progLan = "javascript";
+        else if (fname.endsWith (".java"))
+            progLan = "java";
+        else if (fname.endsWith (".json"))
+            progLan = "json";
         else if (fname.endsWith (".qml"))
             progLan = "qml";
         else if (fname.endsWith (".log", Qt::CaseInsensitive))
@@ -143,6 +160,8 @@
             progLan = "reST";
         else if (fname.endsWith (".dart"))
             progLan = "dart";
+        else if (fname.endsWith (".go"))
+            progLan = "go";
         else if (baseName.startsWith ("makefile.", Qt::CaseInsensitive) && !baseName.endsWith (".txt", Qt::CaseInsensitive))
             progLan = "makefile";
         else if (baseName.compare ("CMakeLists.txt", Qt::CaseInsensitive) == 0)
@@ -162,18 +181,18 @@
     else if (baseName == "mirrorlist")
         progLan = "config";
 
-    if (progLan.isEmpty()) // now, check mime types
+    if (progLan.isEmpty()) // now, check the mime type
     {
-        QFileInfo fInfo (fname);
         if (!fInfo.exists())
             progLan = "url"; // fall back to the default language
         else
         {
-            QString mime;
-            if (!fInfo.isSymLink())
-                mime = getMimeType (fname);
-            else
-                mime = getMimeType (fInfo.symLinkTarget());
+            QMimeType mimeType = fInfo.isSymLink() ? getMimeType (QFileInfo (fname)) : getMimeType (fInfo);
+            const QString mime = mimeType.name();
+            QString parentMime;
+            auto parents = mimeType.parentMimeTypes();
+            if (!parents.isEmpty())
+                parentMime = parents.at (0);
 
             if (mime == "text/x-c++" || mime == "text/x-c++src" || mime == "text/x-c++hdr" || mime == "text/x-chdr")
                 progLan = "cpp";
@@ -185,7 +204,7 @@
                 progLan = "ruby";
             else if (mime == "text/x-lua")
                 progLan = "lua";
-            else if (mime.startsWith("text/x-python")) // it may be "text/x-python3"
+            else if (mime.startsWith ("text/x-python")) // it may be "text/x-python3"
                 progLan = "python";
             else if (mime == "application/x-perl")
                 progLan = "perl";
@@ -199,18 +218,17 @@
                 progLan = "troff";
             else if (mime == "text/x-tex" || mime == "application/x-lyx")
                 progLan = "LaTeX";
-            else if (mime == "application/xml" || mime == "image/svg+xml" || mime == "application/x-designer"
-                     || mime == "application/metalink4+xml" || mime == "application/metalink+xml"
-                     || mime == "application/x-gtk-builder" || mime == "text/rdf+xml" || mime == "application/rdf+xml"
-                     || mime == "application/x-docbook+xml" || mime == "application/x-xbel" || mime == "text/feathernotes-fnx"
-                     || mime == "text/vnd.trolltech.linguist" || mime == "text/x-opml+xml"
-                     || mime == "application/xspf+xml" || mime == "audio/x-ms-asx"
-                     || mime == "application/vnd.kde.kxmlguirc" || mime == "application/vnd.google-earth.kml+xml" || mime == "application/vnd.kde.kcfg")
+            else if (mime == "text/html" || parentMime == "text/html" || mime == "application/xhtml+xml") // should come before xml check
+                progLan = "html";
+            else if (mime == "application/xml" || parentMime == "application/xml"
+                     || mime == "text/feathernotes-fnx" || mime == "audio/x-ms-asx" || mime == "text/x-nfo")
                 progLan = "xml";
             else if (mime == "text/css")
                 progLan = "css";
             else if (mime == "text/x-scss")
                 progLan = "scss";
+            else if (mime == "text/x-pascal")
+                progLan = "pascal";
             else if (mime == "text/x-changelog")
                 progLan = "changelog";
             else if (mime == "application/x-desktop")
@@ -219,6 +237,10 @@
                 progLan = "config";
             else if (mime == "application/javascript")
                 progLan = "javascript";
+            else if (mime == "text/x-java")
+                progLan = "java";
+            else if (mime == "application/json")
+                progLan = "json";
             else if (mime == "text/x-qml")
                 progLan = "qml";
             else if (mime == "text/x-log")
@@ -231,14 +253,14 @@
                 progLan = "yaml";
             else if (mime == "text/x-diff" || mime == "text/x-patch")
                 progLan = "diff";
-            else if (mime == "text/html" || mime == "application/xhtml+xml")
-                progLan = "html";
             else if (mime == "text/markdown")
                 progLan = "markdown";
             else if (mime == "audio/x-mpegurl" || mime == "application/vnd.apple.mpegurl")
                 progLan = "m3u";
+            else if (mime == "text/x-go")
+                progLan = "go";
             else if (fname.endsWith (".conf") || fname.endsWith (".ini"))
-                 progLan = "config"; // only if the mime type isn't found
+                progLan = "config"; // only if the mime type isn't found
             else // fall back to the default language
                 progLan = "url";
         }
diff -Nru featherpad-0.17.1/featherpad/tabbar.cpp featherpad-1.0.1/featherpad/tabbar.cpp
--- featherpad-0.17.1/featherpad/tabbar.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/tabbar.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -41,6 +41,9 @@
 /*************************/
 void TabBar::mousePressEvent (QMouseEvent *event)
 {
+    dragStarted_ = false;
+    dragStartPosition_ = QPoint();
+
     if (locked_)
     {
         event->ignore();
@@ -54,8 +57,6 @@
         else if (event->type() == QEvent::MouseButtonDblClick && count() > 0)
             emit addEmptyTab();
     }
-
-    dragStarted_ = false;
 }
 /*************************/
 void TabBar::mouseReleaseEvent (QMouseEvent *event)
@@ -73,7 +74,7 @@
 /*************************/
 void TabBar::mouseMoveEvent (QMouseEvent *event)
 {
-    if (!dragStartPosition_.isNull()
+    if (!dragStarted_ && !dragStartPosition_.isNull()
         && (event->pos() - dragStartPosition_).manhattanLength() >= QApplication::startDragDistance())
     {
       dragStarted_ = true;
@@ -93,7 +94,7 @@
 
         QPointer<QDrag> drag = new QDrag (this);
         QMimeData *mimeData = new QMimeData;
-        QByteArray array = (QString::number(window()->winId()) + "+" + QString::number(index)).toUtf8();
+        QByteArray array = QString::number (index).toUtf8();
         mimeData->setData ("application/featherpad-tab", array);
         drag->setMimeData (mimeData);
         QPixmap px = QIcon (":icons/tab.svg").pixmap (22, 22);
diff -Nru featherpad-0.17.1/featherpad/tabwidget.cpp featherpad-1.0.1/featherpad/tabwidget.cpp
--- featherpad-0.17.1/featherpad/tabwidget.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/tabwidget.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -102,5 +102,10 @@
             setCurrentWidget(w);
     }
 }
+/*************************/
+void TabWidget::keyPressEvent (QKeyEvent *event)
+{
+    event->ignore(); // we have our shortcuts for tab switching
+}
 
 }
diff -Nru featherpad-0.17.1/featherpad/tabwidget.h featherpad-1.0.1/featherpad/tabwidget.h
--- featherpad-0.17.1/featherpad/tabwidget.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/tabwidget.h	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -22,6 +22,7 @@
 
 #include <QTabWidget>
 #include <QTimerEvent>
+#include <QKeyEvent>
 #include "tabbar.h"
 
 namespace FeatherPad {
@@ -49,6 +50,7 @@
 
 protected:
     void timerEvent (QTimerEvent *event);
+    void keyPressEvent (QKeyEvent *event);
 
 private slots:
     void tabSwitch (int index);
diff -Nru featherpad-0.17.1/featherpad/textedit.cpp featherpad-1.0.1/featherpad/textedit.cpp
--- featherpad-0.17.1/featherpad/textedit.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/textedit.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -36,28 +36,6 @@
 
 namespace FeatherPad {
 
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-// To work around a nasty bug in Qt 5.14.0
-static QColor overlayColor (const QColor& bgCol, const QColor& overlayCol)
-{
-    if (!overlayCol.isValid()) return QColor(0,0,0);
-    if (!bgCol.isValid()) return overlayCol;
-
-    qreal a1 = overlayCol.alphaF();
-    if (a1 == 1.0) return overlayCol;
-    qreal a0  = bgCol.alphaF();
-    qreal a = (1.0 - a1) * a0 + a1;
-
-    QColor res;
-    res.setAlphaF(a);
-    res.setRedF (((1.0 - a1) * a0 * bgCol.redF() + a1 * overlayCol.redF()) / a);
-    res.setGreenF (((1.0 - a1) * a0 *bgCol.greenF() + a1 * overlayCol.greenF()) / a);
-    res.setBlueF (((1.0 - a1) * a0 * bgCol.blueF() + a1 * overlayCol.blueF()) / a);
-
-    return res;
-}
-#endif
-
 TextEdit::TextEdit (QWidget *parent, int bgColorValue) : QPlainTextEdit (parent)
 {
     prevAnchor_ = prevPos_ = -1;
@@ -74,6 +52,7 @@
     inertialScrolling_ = false;
     scrollTimer_ = nullptr;
 
+    pasting_ = false;
     keepTxtCurHPos_ = false;
     txtCurHPos_ = -1;
 
@@ -117,7 +96,7 @@
         /* Use alpha in paintEvent to gray out the paragraph separators and
            document terminators. The real text will be formatted by the highlgihter. */
         separatorColor_ = Qt::white;
-        separatorColor_.setAlpha (90 - qRound (3 * static_cast<qreal>(darkValue_) / 5));
+        separatorColor_.setAlpha (95 - qRound (3 * static_cast<qreal>(darkValue_) / 5));
     }
     else
     {
@@ -148,10 +127,6 @@
     }
     setCurLineHighlight (-1);
 
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-    separatorColor_ = overlayColor (QColor (bgColorValue, bgColorValue, bgColorValue), separatorColor_);
-#endif
-
     resizeTimerId_ = 0;
     selectionTimerId_ = 0;
     selectionHighlighting_ = false;
@@ -168,12 +143,6 @@
     VScrollBar *vScrollBar = new VScrollBar;
     setVerticalScrollBar (vScrollBar);
 
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-    /* a (temporary) workaround for Qt's horizontal scrollbar bug */
-    HScrollBar *hScrollBar = new HScrollBar;
-    setHorizontalScrollBar (hScrollBar);
-#endif
-
     lineNumberArea_ = new LineNumberArea (this);
     lineNumberArea_->setToolTip (tr ("Double click to center current line"));
     lineNumberArea_->hide();
@@ -475,6 +444,32 @@
 {
     keepTxtCurHPos_ = false;
 
+    /* first, deal with spacial cases of pressing Ctrl */
+    if (event->modifiers() & Qt::ControlModifier)
+    {
+        if (event->modifiers() == Qt::ControlModifier) // no other modifier is pressed
+        {
+            /* deal with hyperlinks */
+            if (event->key() == Qt::Key_Control) // no other key is pressed either
+            {
+                if (highlighter_)
+                {
+                    if (getUrl (cursorForPosition (viewport()->mapFromGlobal (QCursor::pos())).position()).isEmpty())
+                        viewport()->setCursor (Qt::IBeamCursor);
+                    else
+                        viewport()->setCursor (Qt::PointingHandCursor);
+                    QPlainTextEdit::keyPressEvent (event);
+                    return;
+                }
+            }
+        }
+        if (event->key() != Qt::Key_Control) // another modifier/key is pressed
+        {
+            if (highlighter_)
+                viewport()->setCursor (Qt::IBeamCursor);
+        }
+    }
+
     /* workarounds for copy/cut/... -- see TextEdit::copy()/cut()/... */
     if (event == QKeySequence::Copy)
     {
@@ -523,35 +518,18 @@
         return;
     }
 
-    /* first, deal with spacial cases of pressing Ctrl */
-    if (event->modifiers() & Qt::ControlModifier)
+    if (isReadOnly())
     {
-        if (event->modifiers() == Qt::ControlModifier) // no other modifier is pressed
-        {
-            /* deal with hyperlinks */
-            if (event->key() == Qt::Key_Control) // no other key is pressed either
-            {
-                if (highlighter_)
-                {
-                    if (getUrl (cursorForPosition (viewport()->mapFromGlobal (QCursor::pos())).position()).isEmpty())
-                        viewport()->setCursor (Qt::IBeamCursor);
-                    else
-                        viewport()->setCursor (Qt::PointingHandCursor);
-                    QPlainTextEdit::keyPressEvent (event);
-                    return;
-                }
-            }
-        }
-        if (event->key() != Qt::Key_Control) // another modifier/key is pressed
-        {
-            if (highlighter_)
-                viewport()->setCursor (Qt::IBeamCursor);
-        }
+        QPlainTextEdit::keyPressEvent (event);
+        return;
     }
 
-    if (isReadOnly())
+    if (event == QKeySequence::Delete || event == QKeySequence::DeleteStartOfWord)
     {
+        bool hadSelection (textCursor().hasSelection());
         QPlainTextEdit::keyPressEvent (event);
+        if (!hadSelection)
+            emit updateBracketMatching(); // isn't emitted in another way
         return;
     }
 
@@ -1052,6 +1030,18 @@
             return;
         }
     }
+    else if (event->key() == Qt::Key_PageDown || event->key() == Qt::Key_PageUp)
+    {
+        if (event->modifiers() == Qt::ControlModifier)
+        {
+            if (QScrollBar* vbar = verticalScrollBar())
+            { // scroll without changing the cursor position
+                vbar->setValue(vbar->value() + (event->key() == Qt::Key_PageDown ? 1 : -1) * vbar->pageStep());
+                event->accept();
+                return;
+            }
+        }
+    }
     else if (event->key() == Qt::Key_Tab)
     {
         QTextCursor cursor = textCursor();
@@ -1136,7 +1126,7 @@
             return;
         }
     }
-    /* because of a bug in Qt5, the non-breaking space (ZWNJ) may not be inserted with SHIFT+SPACE */
+    /* because of a bug in Qt, the non-breaking space (ZWNJ) may not be inserted with SHIFT+SPACE */
     else if (event->key() == 0x200c)
     {
         insertPlainText (QChar (0x200C));
@@ -1262,7 +1252,8 @@
     if (getSearchedText().isEmpty()) // FPwin::hlight() won't be called
     {
         QList<QTextEdit::ExtraSelection> es;
-        es.prepend (currentLineSelection());
+        if (!currentLine_.cursor.isNull())
+            es.prepend (currentLine_);
         es.append (blueSel_);
         es.append (redSel_);
         setExtraSelections (es);
@@ -1288,32 +1279,11 @@
 }
 void TextEdit::paste()
 {
-    keepTxtCurHPos_ = false; // txtCurHPos_ isn't reset because there may be nothing to paste
-    if (pastePaths_)
-    {
-        if (const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData())
-        {
-            const QList<QUrl> urls = mimeData->urls();
-            if (!urls.isEmpty())
-            {
-                bool multiple (urls.size() > 1);
-                QTextCursor cur = textCursor();
-                cur.beginEditBlock();
-                for (const auto &thisUrl : urls)
-                {
-                    /* encode spaces of non-local paths to have a good highlighting
-                       but remove the schemes of local paths */
-                    cur.insertText (thisUrl.isLocalFile() ? thisUrl.toLocalFile()
-                                                          : thisUrl.toString(QUrl::EncodeSpaces));
-                    if (multiple)
-                        cur.insertText ("\n");
-                }
-                cur.endEditBlock();
-                return;
-            }
-        }
-    }
+    keepTxtCurHPos_ = false; // txtCurHPos_ isn't reset here because there may be nothing to paste
+
+    pasting_ = true;  // see insertFromMimeData()
     QPlainTextEdit::paste();
+    pasting_ = false;
 }
 void TextEdit::selectAll()
 {
@@ -1328,6 +1298,71 @@
     QPlainTextEdit::insertPlainText (text);
 }
 /*************************/
+QMimeData* TextEdit::createMimeDataFromSelection() const
+{
+    /* Prevent a rich text in the selection clipboard when the text
+       is selected by the mouse. Also, see TextEdit::copy()/cut(). */
+    QTextCursor cursor = textCursor();
+    if (cursor.hasSelection())
+    {
+        QMimeData *mimeData = new QMimeData;
+        mimeData->setText (cursor.selection().toPlainText());
+        return mimeData;
+    }
+    return nullptr;
+}
+/*************************/
+// We want to pass dropping of files to the main widget with a custom signal.
+// We also want to control whether the pasted URLs should be opened.
+bool TextEdit::canInsertFromMimeData (const QMimeData* source) const
+{
+    return source->hasUrls() || QPlainTextEdit::canInsertFromMimeData (source);
+}
+void TextEdit::insertFromMimeData (const QMimeData* source)
+{
+    keepTxtCurHPos_ = false;
+    if (source->hasUrls())
+    {
+        const QList<QUrl> urlList = source->urls();
+        bool multiple (urlList.count() > 1);
+        if (pasting_ && pastePaths_)
+        {
+            QTextCursor cur = textCursor();
+            cur.beginEditBlock();
+            for (const auto &url : urlList)
+            {
+                /* encode spaces of non-local paths to have a good highlighting
+                   but remove the schemes of local paths */
+                cur.insertText (url.isLocalFile() ? url.toLocalFile()
+                                                  : url.toString (QUrl::EncodeSpaces));
+                if (multiple)
+                    cur.insertText ("\n");
+            }
+            cur.endEditBlock();
+            ensureCursorVisible();
+        }
+        else
+        {
+            txtCurHPos_ = -1; // Qt bug: cursorPositionChanged() isn't emitted with file dropping
+            for (const QUrl &url : urlList)
+            {
+                QString file;
+                QString scheme = url.scheme();
+                if (scheme == "admin") // gvfs' "admin:///"
+                    file = url.adjusted (QUrl::NormalizePathSegments).path();
+                else if (scheme == "file" || scheme.isEmpty())
+                    file = url.adjusted (QUrl::NormalizePathSegments)  // KDE may give a double slash
+                            .toLocalFile();
+                else
+                    continue;
+                emit fileDropped (file, 0, 0, multiple);
+            }
+        }
+    }
+    else
+        QPlainTextEdit::insertFromMimeData (source);
+}
+/*************************/
 void TextEdit::keyReleaseEvent (QKeyEvent *event)
 {
     /* deal with hyperlinks */
@@ -1338,41 +1373,39 @@
 /*************************/
 void TextEdit::wheelEvent (QWheelEvent *event)
 {
+    QPoint anglePoint = event->angleDelta();
     if (event->modifiers() & Qt::ControlModifier)
     {
-        float delta = event->angleDelta().y() / 120.f;
+        float delta = anglePoint.y() / 120.f;
         zooming (delta);
         return;
     }
 
-    bool horizontal (event->angleDelta().x() != 0);
+    bool horizontal (qAbs (anglePoint.x()) > qAbs (anglePoint.y()));
     if (event->modifiers() & Qt::ShiftModifier)
     { // line-by-line scrolling when Shift is pressed
-        int delta = horizontal
-                        ? event->angleDelta().x() : event->angleDelta().y();
+        int delta = horizontal ? anglePoint.x()
+                               : anglePoint.y();
+        if (qAbs (delta) >= QApplication::wheelScrollLines())
+        {
 #if (QT_VERSION >= QT_VERSION_CHECK(5,15,0))
-        QWheelEvent e (event->position(),
-                       event->globalPosition(),
-#else
-        QWheelEvent e (event->posF(),
-                       event->globalPosF(),
-#endif
-                       event->pixelDelta(),
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-                       horizontal
-                           ? QPoint (delta / QApplication::wheelScrollLines(), 0)
-                           : QPoint (0, delta / QApplication::wheelScrollLines()),
+            QWheelEvent e (event->position(),
+                           event->globalPosition(),
 #else
-                       QPoint (0, delta / QApplication::wheelScrollLines()),
+            QWheelEvent e (event->posF(),
+                           event->globalPosF(),
 #endif
-                       event->buttons(),
-                       Qt::NoModifier,
-                       event->phase(),
-                       false,
-                       event->source());
-        QCoreApplication::sendEvent (horizontal
-                                         ? horizontalScrollBar()
-                                         : verticalScrollBar(), &e);
+                           event->pixelDelta(),
+                           QPoint (0, delta / QApplication::wheelScrollLines()),
+                           event->buttons(),
+                           Qt::NoModifier,
+                           event->phase(),
+                           false,
+                           event->source());
+            QCoreApplication::sendEvent (horizontal
+                                             ? horizontalScrollBar()
+                                             : verticalScrollBar(), &e);
+        }
         return;
     }
 
@@ -1382,10 +1415,20 @@
         && !horizontal
         && event->source() == Qt::MouseEventNotSynthesized)
     {
-        if (QScrollBar* vbar = verticalScrollBar())
+        QScrollBar *vbar = verticalScrollBar();
+        if (vbar && vbar->isVisible())
         {
-            /* always set the initial speed to 3 lines per wheel turn */
-            int delta = event->angleDelta().y() * 3 / QApplication::wheelScrollLines();
+            int delta = anglePoint.y();
+            /* with mouse, always set the initial speed to 3 lines per wheel turn;
+               with more sensitive devices, set it to one line */
+            if (qAbs (delta) >= 120)
+            {
+                if (qAbs (delta * 3) >= QApplication::wheelScrollLines())
+                    delta = delta * 3 / QApplication::wheelScrollLines();
+            }
+            else if (qAbs (delta) >= QApplication::wheelScrollLines())
+                delta = delta / QApplication::wheelScrollLines();
+
             if((delta > 0 && vbar->value() == vbar->minimum())
                || (delta < 0 && vbar->value() == vbar->maximum()))
             {
@@ -1397,12 +1440,20 @@
             wheelEvents << QDateTime::currentMSecsSinceEpoch();
             while (wheelEvents.last() - wheelEvents.first() > 500)
                 wheelEvents.removeFirst();
-            int fps = qMax (SCROLL_FRAMES_PER_SEC / wheelEvents.size(), 5);
+            int steps = qMax (SCROLL_FRAMES_PER_SEC / wheelEvents.size(), 5)
+                        * SCROLL_DURATION / 1000;
+
+            /* wait until the angle delta reaches an acceptable value */
+            static int _delta = 0;
+            _delta += delta;
+            if (qAbs (_delta) < steps)
+                return;
 
             /* set the data for inertial scrolling */
             scrollData data;
-            data.delta = delta;
-            data.totalSteps = data.leftSteps = fps * SCROLL_DURATION / 1000;
+            data.delta = _delta;
+            _delta = 0;
+            data.totalSteps = data.leftSteps = steps;
             queuedScrollSteps_.append (data);
             if (!scrollTimer_)
             {
@@ -1410,7 +1461,8 @@
                 scrollTimer_->setTimerType (Qt::PreciseTimer);
                 connect (scrollTimer_, &QTimer::timeout, this, &TextEdit::scrollWithInertia);
             }
-            scrollTimer_->start (1000 / SCROLL_FRAMES_PER_SEC);
+            if (!scrollTimer_->isActive())
+                scrollTimer_->start (1000 / SCROLL_FRAMES_PER_SEC);
             return;
         }
     }
@@ -1422,7 +1474,13 @@
 /*************************/
 void TextEdit::scrollWithInertia()
 {
-    if (!verticalScrollBar()) return;
+    QScrollBar *vbar = verticalScrollBar();
+    if (!vbar || !vbar->isVisible())
+    {
+        queuedScrollSteps_.clear();
+        scrollTimer_->stop();
+        return;
+    }
 
     int totalDelta = 0;
     for (QList<scrollData>::iterator it = queuedScrollSteps_.begin(); it != queuedScrollSteps_.end(); ++it)
@@ -1444,15 +1502,18 @@
         else break;
     }
 
-    QWheelEvent e (QPointF(),
-                   QPointF(),
-                   QPoint(),
-                   QPoint (0, totalDelta),
-                   Qt::NoButton,
-                   Qt::NoModifier,
-                   Qt::NoScrollPhase,
-                   false);
-    QCoreApplication::sendEvent (verticalScrollBar(), &e);
+    if (totalDelta != 0)
+    {
+        QWheelEvent e (QPointF(),
+                       QPointF(),
+                       QPoint(),
+                       QPoint (0, totalDelta),
+                       Qt::NoButton,
+                       Qt::NoModifier,
+                       Qt::NoScrollPhase,
+                       false);
+        QCoreApplication::sendEvent (vbar, &e);
+    }
 
     if (queuedScrollSteps_.empty())
         scrollTimer_->stop();
@@ -2039,13 +2100,6 @@
 /*************************/
 void TextEdit::mouseMoveEvent (QMouseEvent *event)
 {
-    /* prevent dragging if there is no real mouse movement */
-    if (event->buttons() == Qt::LeftButton
-        && (event->globalPos() - selectionPressPoint_).manhattanLength() <= qApp->startDragDistance())
-    {
-        return;
-    }
-
     QPlainTextEdit::mouseMoveEvent (event);
 
     if (!highlighter_) return;
@@ -2078,52 +2132,39 @@
             && event->buttons() == Qt::LeftButton)
         {
             tripleClickTimer_.invalidate();
-            QTextCursor txtCur = textCursor();
-            const QString txt = txtCur.block().text();
-            const int l = txt.length();
-            if (l > 10000) return;
-            txtCur.movePosition (QTextCursor::StartOfBlock);
-            int i = 0;
-            while (i < l && txt.at (i).isSpace())
-                ++i;
-            /* WARNING: QTextCursor::movePosition() can be a mess with RTL
-                        but QTextCursor::setPosition() works fine. */
-            if (i < l)
-            {
-                txtCur.setPosition (txtCur.position() + i);
-                int j = l;
-                while (j > i && txt.at (j -  1).isSpace())
-                    --j;
-                txtCur.setPosition (txtCur.position() + j - i, QTextCursor::KeepAnchor);
+            if (!(qApp->keyboardModifiers() & Qt::ControlModifier))
+            {
+                QTextCursor txtCur = textCursor();
+                const QString txt = txtCur.block().text();
+                const int l = txt.length();
+                txtCur.movePosition (QTextCursor::StartOfBlock);
+                int i = 0;
+                while (i < l && txt.at (i).isSpace())
+                    ++i;
+                /* WARNING: QTextCursor::movePosition() can be a mess with RTL
+                            but QTextCursor::setPosition() works fine. */
+                if (i < l)
+                {
+                    txtCur.setPosition (txtCur.position() + i);
+                    int j = l;
+                    while (j > i && txt.at (j -  1).isSpace())
+                        --j;
+                    txtCur.setPosition (txtCur.position() + j - i, QTextCursor::KeepAnchor);
+                    setTextCursor (txtCur);
+                }
+                if (txtCur.hasSelection())
+                {
+                    QClipboard *cl = QApplication::clipboard();
+                    if (cl->supportsSelection())
+                        cl->setText (txtCur.selection().toPlainText(), QClipboard::Selection);
+                }
+                event->accept();
+                return;
             }
-            else
-                txtCur.setPosition (txtCur.position() + i, QTextCursor::KeepAnchor);
-            setTextCursor (txtCur);
-            return;
-        }
-        tripleClickTimer_.invalidate();
-    }
-
-    /* get the global press position if it's inside a selection to know
-       whether there will be a real mouse movement at mouseMoveEvent() */
-    if (event->buttons() == Qt::LeftButton
-        && qApp->keyboardModifiers() == Qt::NoModifier)
-    {
-        QTextCursor cur = cursorForPosition (event->pos());
-        int pos = cur.position();
-        QTextCursor txtCur = textCursor();
-        int selStart = txtCur.selectionStart();
-        int selEnd = txtCur.selectionEnd();
-        if (pos == cur.anchor() && selStart != selEnd
-            && pos >= qMin (selStart, selEnd) && pos <= qMax (selStart, selEnd))
-        {
-            selectionPressPoint_ = event->globalPos();
         }
         else
-            selectionPressPoint_ = QPoint();
+            tripleClickTimer_.invalidate();
     }
-    else
-        selectionPressPoint_ = QPoint();
 
     QPlainTextEdit::mousePressEvent (event);
 
@@ -2137,22 +2178,12 @@
 /*************************/
 void TextEdit::mouseReleaseEvent (QMouseEvent *event)
 {
+    pasting_ = true; // see insertFromMimeData()
     QPlainTextEdit::mouseReleaseEvent (event);
-    if (event->button() == Qt::LeftButton)
-    {
-        /* workaround for copying to the selection clipboard;
-           see TextEdit::copy()/cut() for an explanation */
-        QTextCursor cursor = textCursor();
-        if (cursor.hasSelection())
-        {
-            QClipboard *cl = QApplication::clipboard();
-            if (cl->supportsSelection())
-                cl->setText (cursor.selection().toPlainText(), QClipboard::Selection);
-        }
-    }
-    else return;
+    pasting_ = false;
 
-    if (!highlighter_
+    if (event->button() != Qt::LeftButton
+        || !highlighter_
         || !(qApp->keyboardModifiers() & Qt::ControlModifier)
         /* another key may also be pressed (-> keyPressEvent) */
         || viewport()->cursor().shape() != Qt::PointingHandCursor)
@@ -2161,14 +2192,17 @@
     }
 
     QTextCursor cur = cursorForPosition (event->pos());
-    QString str = getUrl (cur.position());
-    if (!str.isEmpty() && cur == cursorForPosition (pressPoint_))
+    if (cur == cursorForPosition (pressPoint_))
     {
-        QUrl url (str);
-        if (url.isRelative()) // treat relative URLs as local paths (not needed here)
-            url = QUrl::fromUserInput (str, "/");
-        if (!QProcess::startDetached ("gio", QStringList() << "open" << url.toString()))
-            QDesktopServices::openUrl (url);
+        QString str = getUrl (cur.position());
+        if (!str.isEmpty())
+        {
+            QUrl url (str);
+            if (url.isRelative()) // treat relative URLs as local paths (not needed here)
+                url = QUrl::fromUserInput (str, "/");
+            if (!QProcess::startDetached ("gio", QStringList() << "open" << url.toString()))
+                QDesktopServices::openUrl (url);
+        }
     }
     pressPoint_ = QPoint();
 }
diff -Nru featherpad-0.17.1/featherpad/textedit.h featherpad-1.0.1/featherpad/textedit.h
--- featherpad-0.17.1/featherpad/textedit.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/textedit.h	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2020 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -304,35 +304,11 @@
     bool event (QEvent *event);
     bool eventFilter (QObject *watched, QEvent *event);
 
+    QMimeData* createMimeDataFromSelection() const;
     /* we want to pass dropping of files to
        the main widget with a custom signal */
-    bool canInsertFromMimeData (const QMimeData* source) const {
-        return source->hasUrls() || QPlainTextEdit::canInsertFromMimeData (source);
-    }
-    void insertFromMimeData (const QMimeData* source) {
-        keepTxtCurHPos_ = false;
-        if (source->hasUrls())
-        {
-            txtCurHPos_ = -1; // Qt bug: cursorPositionChanged() isn't emitted with file dropping
-            const QList<QUrl> urlList = source->urls();
-            bool multiple (urlList.count() > 1);
-            for (const QUrl &url : urlList)
-            {
-                QString file;
-                QString scheme = url.scheme();
-                if (scheme == "admin") // gvfs' "admin:///"
-                    file = url.adjusted (QUrl::NormalizePathSegments).path();
-                else if (scheme == "file" || scheme.isEmpty())
-                    file = url.adjusted (QUrl::NormalizePathSegments)  // KDE may give a double slash
-                              .toLocalFile();
-                else
-                    continue;
-                emit fileDropped (file, 0, 0, multiple);
-            }
-        }
-        else
-            QPlainTextEdit::insertFromMimeData (source);
-    }
+    bool canInsertFromMimeData (const QMimeData* source) const;
+    void insertFromMimeData (const QMimeData* source);
 
 private slots:
     void updateLineNumberAreaWidth (int newBlockCount);
@@ -363,10 +339,11 @@
     QColor lineHColor_;
     int resizeTimerId_, selectionTimerId_; // for not wasting CPU's time
     QPoint pressPoint_; // used internally for hyperlinks
-    QPoint selectionPressPoint_; // used internally to delay dragging until mouse movement
     QFont font_; // used internally for keeping track of the unzoomed font
     QString textTab_; // text tab in terms of spaces
     QElapsedTimer tripleClickTimer_;
+    /* To know whether text may be pasted, in contrast to text/file dropping: */
+    bool pasting_;
     /* To keep text cursor's horizontal position with Up/Down keys
        (also used in a workaround for a Qt regression): */
     bool keepTxtCurHPos_;
diff -Nru featherpad-0.17.1/featherpad/vscrollbar.cpp featherpad-1.0.1/featherpad/vscrollbar.cpp
--- featherpad-0.17.1/featherpad/vscrollbar.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/vscrollbar.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -18,57 +18,35 @@
  */
 
 #include "vscrollbar.h"
-#include <QApplication>
-#if (QT_VERSION != QT_VERSION_CHECK(5,14,0))
-#include <QEvent>
-#endif
 
 namespace FeatherPad {
 
-VScrollBar::VScrollBar (QWidget *parent)
-    : QScrollBar (parent)
-{
-    defaultWheelSpeed = QApplication::wheelScrollLines();
-    if (defaultWheelSpeed == 0) // in case something's wrong
-        defaultWheelSpeed = 3;
-}
+VScrollBar::VScrollBar (QWidget *parent) : QScrollBar (parent) {}
 /*************************/
-bool VScrollBar::event (QEvent *event)
+void VScrollBar::wheelEvent (QWheelEvent *event)
 {
-    if (event->type() == QEvent::Enter)
-        QApplication::setWheelScrollLines (102);
-    else if (event->type() == QEvent::Leave
-             /* Apparently, the Qt5 hover bug is never going to be fixed! */
-             || (QApplication::wheelScrollLines() != defaultWheelSpeed
-                 && !rect().contains (mapFromGlobal (QCursor::pos()))))
+    if (!underMouse()
+        || !event->spontaneous()
+        || event->source() != Qt::MouseEventNotSynthesized
+        /* Apparently, Qt's hover bug is never going to be fixed! */
+        || !rect().contains (mapFromGlobal (QCursor::pos())))
     {
-        QApplication::setWheelScrollLines (defaultWheelSpeed);
+        QScrollBar::wheelEvent (event);
+        return;
     }
+    QPoint anglePoint = event->angleDelta();
+    int delta = qAbs (anglePoint.x()) > qAbs (anglePoint.y()) ? anglePoint.x()
+                                                              : anglePoint.y();
 
-    return QScrollBar::event (event);
-}
-/*************************/
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-void HScrollBar::wheelEvent (QWheelEvent *event) {
-    if (event->angleDelta().x() == 0)
-    {
-        int deltaY = event->angleDelta().y();
-        if (deltaY != 0)
-        {
-            QWheelEvent e (event->pos(),
-                           event->globalPos(),
-                           event->pixelDelta(),
-                           QPoint (deltaY, 0),
-                           event->buttons(),
-                           event->modifiers(),
-                           event->phase(),
-                           event->source());
-            QCoreApplication::sendEvent (this, &e);
-            return;
-        }
-    }
-    QScrollBar::wheelEvent (event);
+    /* wait until the angle delta reaches that of an ordinary mouse wheel */
+    static int _effectiveDelta = 0;
+    _effectiveDelta += delta;
+    if (qAbs (_effectiveDelta) < 120)
+        return;
+
+    int step = (_effectiveDelta < 0 ? 1 : -1) * qMax (pageStep() / ((event->modifiers() & Qt::ShiftModifier) ? 2 : 1), 1);
+    _effectiveDelta = 0;
+    setSliderPosition (sliderPosition() + step);
 }
-#endif
 
 }
diff -Nru featherpad-0.17.1/featherpad/vscrollbar.h featherpad-1.0.1/featherpad/vscrollbar.h
--- featherpad-0.17.1/featherpad/vscrollbar.h	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/vscrollbar.h	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2019 <tsujan2000 at gmail.com>
+ * Copyright (C) Pedram Pourang (aka Tsu Jan) 2014-2021 <tsujan2000 at gmail.com>
  *
  * FeatherPad is free software: you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -21,9 +21,7 @@
 #define VSCROLLBAR_H
 
 #include <QScrollBar>
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
 #include <QWheelEvent>
-#endif
 
 namespace FeatherPad {
 
@@ -36,24 +34,8 @@
     VScrollBar (QWidget *parent = nullptr);
 
 protected:
-    bool event (QEvent *event);
-
-private:
-    int defaultWheelSpeed;
-};
-
-#if (QT_VERSION == QT_VERSION_CHECK(5,14,0))
-/* A (temporary) workaround for Qt's horizontal scrollbar bug. */
-class HScrollBar : public QScrollBar
-{
-    Q_OBJECT
-public:
-    HScrollBar (QWidget *parent = nullptr) : QScrollBar (parent) {};
-
-protected:
-    void wheelEvent (QWheelEvent *event);
+    void wheelEvent (QWheelEvent *event) override;
 };
-#endif
 
 }
 
diff -Nru featherpad-0.17.1/featherpad/x11.cpp featherpad-1.0.1/featherpad/x11.cpp
--- featherpad-0.17.1/featherpad/x11.cpp	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/featherpad/x11.cpp	2021-10-15 02:56:34.000000000 +0200
@@ -17,11 +17,10 @@
  * @license GPL-3.0+ <https://spdx.org/licenses/GPL-3.0+.html>
  */
 
-#include <QString>
+#include <QX11Info>
 #include "x11.h"
 
 #include <X11/Xatom.h>
-#include <QX11Info>
 
 namespace FeatherPad {
 
@@ -94,10 +93,10 @@
     return res;
 }
 /*************************/
-// The following two functions are adapted from x11tools.cpp,
+// The following two functions were adapted from x11tools.cpp,
 // belonging to kadu (https://github.com/vogel/kadu).
-// They were needed because isMinimized() may not detect
-// the shaded state with all WMs.
+// They are needed because QWidget::isMinimized()
+// may not detect the shaded state with all WMs.
 
 bool isWindowShaded (Window window)
 {
diff -Nru featherpad-0.17.1/INSTALL featherpad-1.0.1/INSTALL
--- featherpad-0.17.1/INSTALL	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/INSTALL	2021-10-15 02:56:34.000000000 +0200
@@ -59,7 +59,7 @@
 	qmake && make
 	sudo make install
 
-You might need to put the full path of qmake in the first command and also the full path of Qt5's "lrelease" binary in 'featherpad/featherpad.pro' (only one place). After a qmake compilation, you could clean the source directory with this command:
+You might need to put the full path of qmake in the first command and also the full path of Qt5's "lrelease" binary in 'featherpad/featherpad.pro'. After a qmake compilation, you could clean the source directory with this command:
 
 	make distclean
 
diff -Nru featherpad-0.17.1/NEWS featherpad-1.0.1/NEWS
--- featherpad-0.17.1/NEWS	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/NEWS	2021-10-15 02:56:34.000000000 +0200
@@ -1,5 +1,5 @@
 Latest version:
 
-	6 Jan 2021, V0.17.0
+	15 Oct 2021, V1.0.1
 
 See "ChangeLog" for changes.
diff -Nru featherpad-0.17.1/README.md featherpad-1.0.1/README.md
--- featherpad-0.17.1/README.md	2021-01-06 18:57:35.000000000 +0100
+++ featherpad-1.0.1/README.md	2021-10-15 02:56:34.000000000 +0200
@@ -20,15 +20,21 @@
   * Spell checking with Hunspell;
   * Printing;
   * Text zooming;
-  * Appropriate but non-interrupting prompts;
-  * Haiku OS support (by [khallebal at GitHub](https://github.com/khallebal));
-  * macOS support (by [Pavel Shlyak](https://github.com/shlyakpavel)); and
+  * Appropriate but non-interrupting prompts; and
   * Other features that can be found in its settings, on its menus or when it is actually used.
 
 Please see [INSTALL](INSTALL) for instructions on compilation, installation and translation!
 
 FeatherPad was written in GTK+ at first, then ported to Qt with more features. Its homepage is <https://github.com/tsujan/FeatherPad>.
 
+## Credits
+
+Haiku OS support is added by [khallebal at GitHub](https://github.com/khallebal).
+
+macOS support is added by [Pavel Shlyak](https://github.com/shlyakpavel).
+
+OS/2 support is added by [josch1710 at GitHub](https://github.com/josch1710).
+
 ## Screenshots
 
 The active Qt widget style determines the look and feel of every Qt application. The following screenshots are taken with a Kvantum theme and the dark color scheme of FeatherPad:
diff -Nru featherpad-0.17.1/README_OS2.md featherpad-1.0.1/README_OS2.md
--- featherpad-0.17.1/README_OS2.md	1970-01-01 01:00:00.000000000 +0100
+++ featherpad-1.0.1/README_OS2.md	2021-10-15 02:56:34.000000000 +0200
@@ -0,0 +1,20 @@
+# FeatherPad for OS/2 (by josch1710)
+
+## Clipboard
+
+The Qt5 port doesn't support the system clipboard, yet
+(cf https://github.com/bitwiseworks/qtbase-os2/issues/123).
+Because of this, FeatherPad can't support the system clipboard, either.
+The application clipboard will work, though.
+
+## Command line
+
+Because of limitation of Presentation Manager application, you will not see
+any output on the command line. If you want to see the help or version strings
+on the command line, you have to redirect the output, e.g. `featherpad -h | tee -`.
+
+## Miscellanea
+
+* This port was made by Jochen Schäfer <os2 at joschs-robotics.de>. You find OS/2 binaries
+ on [my GitHub repository](https://github.com/josch1710/FeatherPad/releases).
+* The application icon was made by the great David Graser from the original.


More information about the pkg-lxqt-devel mailing list