Fix CJK, Hebrew, Arabic and other Languages in UTF8 marked wronly issue in in Search result while "1 entry per line" option enabled.
The option in question can be enabled in RTL mode now with this commit.
Add translations for these commits:
* Use edge colors in dark mode for listbox border (d65967deab)
* Make EOL (CRLF) display customizable (79e766755d)
* Update localization files (2258274780)
Close#11775
Add translation for item 6246 (current level folding/unfolding).
Add/update translations for dark mode items.
Synchronise translation of "commands" to "Befehle" to have same word in all places.
Close#11738
Better specify the cmdline interpreter:
This solves a possible confusion in between the cmdline interpreter and the possible folder named "cmd"' for the ShellExecute WINAPI.
Fix#11818, close#11833
Also mark several found occurrences in the same entry - user can click on the marked occurrence to jump among found result in the found line.
This option is enabled by default. It can be disabled in "Searching" section of Preferences dialog.
It's an alternative implementation of #11705Fix#2481, fix#1499, fix#5547, fix#2987, fix#4525, fix#3224, close#11808
It's due to the folding the previous result before the begin of search.
For the unknown reason there's performance issue if folding action is at this place for Scintilla 5.
Fix#11814
Here is the behaviour of this commit:
1. If there's only one file dirty, and it's current editing one, then SaveAll dialog won't display.
2. If there's only one file dirty, and it's NOT current editing one, then SaveAll dialog WILL display.
3. If there's 1 editing file which is dirty, and its clone (dirty also) is on the other view, then SaveAll dialog WILL display.
Fix#10995
1. use edge colors in darkmode for edit control border.
2. tweaks to properly drawn listbox scrollbar, when using custom border.
3. disabled edge color to dark mode preference dialog.
4. use disabled edge color for disabled combobox.
Fix#11207, fix#11376, close#11756
1. Add plus and arrow buttons on menu bar beside of 'X' button:
- plus button: for adding a new document
- arrow button: display a drop down list for all opened files to offer users quick access of switching file
2. Enhance the most recent opened file list: Increase maximun file number to 30.
Fix#11229, close#11757
* Fix certificate checking problem: the old certificate has been expired. In v8.4.2 Notepad++ & its components are signed by the new certificate. The certificate is checked before launching WinGUp (updater) to compare with the certificate key value stored in Notepad++. Updating certificate key value fixes the problem of WinUp validation, so Plugin Admin can be shown on the menu.
* Fix a typo.
Fix#11742
Add translations for these commit:
* Add edge highlight color in customized dark colors of Preferences dialog (ad8b1791b4)
* Update localization files (e8817eacd0)
Close#11686
Query for DisplayVersion as well instead of using only ReleaseId.
Windows deprecated the ReleaseID registry entry (now it is no longer updated and on newer Windows 10/11 builds will remain the same) and moved to use DisplayVersion.
Attempt now to first query DisplayVersion and in case that is missing, fall back to ReleaseID for older Windows 10 builds.
Close#11714
This is the enhancement of a long time forgotten feature.
To override the current toolbar icons, we needs 2 things: "toolbarIcons.xml" file and one icons set.
Here are the instructions to customize toolbar icons:
1. Put the file "toolbarIcons.xml" (Note 1) in the same folder of "config.xml" file (Note 2).
2. Create a new folder "toolbarIcons" in the folder where you put "toolbarIcons.xml" file.
3. Edit the file "toolbarIcons.xml": put the icon set name you want in "icoFolderName" attribute (Note 3).
for example: `<ToolBarIcons icoFolderName="myAwesomeIcons" />`
4. Go into "toolbarIcons" folder and create a new folder with the exact name of the icon set name you provided in "icoFolderName".
5. Put all your customized icons into "[toolbarIcons.xml's folder]\toolbarIcons\myAwesomeIcons\".
6. Now it's the magic moment: Relaunch Notepad++ and you'll see your icon set instead of the default icons.
Note:
1. The content of "toolbarIcons.xml" is following:
```xml
<?xml version="1.0" encoding="UTF-8" ?>
<NotepadPlus>
<ToolBarIcons icoFolderName="nppLagacyIcons" />
</NotepadPlus>
```
2. If you find the file "doLocalConf.xml" in the Notepad++ installed directory, you will find the "config.xml" in Notepad++ installed directory. Otherwise it should be in "%APPDATA%\Notepad++\" directory.
3. if "icoFolderName" value is an emptty string, the path of icons will be in "[toolbarIcons.xml's folder]\toolbarIcons\default\" folder.
Each replacing icon (45 icons) has the fixed and specific name:
| index | Normal icon | Disabled icon |
|-------|--------------------------|---------------------------------|
|1 | new.ico | |
|2 | open.ico | |
|3 | save.ico | save_disabled.ico |
|4 | save-all.ico | save-all_disabled.ico |
|5 | close.ico | |
|6 | close-all.ico | |
|7 | print.ico | |
|8 | cut.ico | cut_disabled.ico |
|9 | copy.ico | copy_disabled.ico |
|10 | paste.ico | paste_disabled.ico |
|11 | undo.ico | undo_disabled.ico |
|12 | redo.ico | redo_disabled.ico |
|13 | find.ico | |
|14 | replace.ico | |
|15 | zoom-in.ico | |
|16 | zoom-out.ico | |
|17 | sync-vertical.ico | |
|18 | sync-horizontal.ico | |
|19 | word-wrap.ico | |
|20 | all-chars.ico | |
|21 | indent-guide.ico | |
|22 | udl-dlg.ico | |
|23 | doc-map.ico | |
|24 | doc-list.ico | |
|25 | function-list.ico | |
|26 | folder-as-workspace.ico | |
|27 | monitoring.ico | monitoring_disabled.ico |
|28 | record.ico | record_disabled.ico |
|29 | stop-record.ico | stop-record_disabled.ico |
|30 | playback.ico | playback_disabled.ico |
|31 | playback-multiple.ico | playback-multiple_disabled.ico |
|32 | save-macro.ico | save-macro_disabled.ico |
It's not necessary to have all complete set (45 icons). The absent icons won't just be substituted.
Fix#9913
Add an option "Make current line folding/unfolding commands togglable" in Editing section of Preference dialog to make both Collapse/Uncollapse Current level commands togglable.
Fix#11529, fix#9196, close 11699
Select the entire DebugInfo text, with the command line params inserted.
This is a minor fix for an issue resulting from the last-minute changes in commit 0f8d572 (Add command line argument for plugin, a related notification and an API).
Close#11697
Fix also an issue that the word where the cursor is on in the edit zone is selected after running ABOUT box, that makes all the occurence of same word highlighted in the edit zone.
Fix#11639, fix 11671, close#11673
Fix crashes when re-invoked with -udl command line parameter with more than 7 characters as its value:
Serialize _udlName from generic_string to wchar_t _udlName[MAX_PATH].
Fix#11633, close#11681
1. Add a cmd argument for plugin: -pluginMessage="SPECIFIC_PLUGIN_MESSQGE" where SPECIFIC_PLUGIN_MESSQGE is a string which can contain white space. For example: -pluginMessage="arg1 arg2 arg3".
2. NPPN_CMDLINEPLUGINMSG notification: which will be triggered by -pluginMessage and plugins will get their specific message "arg1 arg2 arg3" via idFrom field:
//scnNotification->nmhdr.code = NPPN_CMDLINEPLUGINMSG;
//scnNotification->nmhdr.hwndFrom = hwndNpp;
//scnNotification->nmhdr.idFrom = pluginMessage; //where pluginMessage is pointer of type wchar_t
3. Add NPPM_GETCURRENTCMDLINE API for getting the latest command line.
4. Update command line dynamically in Debug info dialog.
Fix#11576, close#11589
Changes:
1) Removal of redundant lines (redundancy as defined by absence from the English version, I have not gone on to check the code for where each term is used, refer to Issue https://github.com/notepad-plus-plus/notepad-plus-plus/issues/11561#issue-1210847469)
2) Addition of lines which are found in the English version but were absent in the Tamil
3) Spelling error rectifications (eg: "கீல்" is an erroneous form of கீழ்)
4) Retention of English words for certain terms best left untranslated (eg: Macro; பெருநிரல் _does_ convey the literal meaning, but would be extremely confusing, as such usage is specialized and not directly connected to the literal meaning. Macro here performs much like a proper noun, an untranslatable, and I opine that translating that would be quite similar to translating Notepad++, Windows etc. In other cases, perceived rarity of the term's usage, potential confusion, and lack of sufficient systematicity in the usage of programming terms in Tamil have also been reasons)
5) Rewording certain terms as they seem of a fringe usage, and replacing them with commoner alternatives (eg: படி எடு for Copy has been replaced by நகலெடு, whose use is fairly universal nowadays, in OSs, apps, websites, etc. which display in Tamil. It must be noted that the previous version seems to be nearly ten years old, and probably the usage was more fluid and non-standard back then.)
6) Removal of lines that are plainly copied out from the English version untranslated, and cannot be translated
7) Addition of &/alt codes (I'm not sure exactly what they're called) as in English
Unresolved Problem Points:
1) The alt codes have been presented to a user using the Latin/English keyboard. (eg: for "&File", "கோப்பு (&F)" has been provided instead of the equally viable "&கோப்பு") This, although in keeping with the previous version, may present Tamil users an inconsistent display, what with the numerous bracketed and seemingly random English letters beside Tamil text, and inconvenience users of Tamil keyboard(s).
The example of other Indian languages may be used to argue for "&கோப்பு", while the example of Chinese, Japanese and Korean may be used to argue otherwise (it must be noted, though, that Tamil and Indian languages have their own keyboards as well as phonetic typing from English, whereas Chinese et.al. are typed, as far as I am aware, solely using the phonetic English method, and therefore the first argument may not stand)
To be very honest, I almost set out removing all the old bracketed-English-letter style stuff and creating them based off Tamil letters, but chickened out seeing the utter scale. I also am not sure how this would be welcomed by users, since they may now be quite habituated to using the English letters, and tampering with the functionality of the application (to a tiny extent, admittedly) is _not_ what I thought I was taking into my hands when I started doing this
2) Most of the popup messages have been left untranslated, coming to more than hundred lines (I'm sorry, I'm not doing any more now, maybe later, or hopefully someone else who uses N++ in Tamil/knows Tamil can step up and help; I'm sure my version of even those parts that I _have_ edited is not up to snuff either)
3) There are some technical vocabulary issues. For instance, there is a general confusion between அழி, நீக்கு and அகற்று for delete and remove. I have chosen அகற்று for remove, and kept the other two both for delete, due to how often both were used. But I think there could be a better solution, and a more systematic one. This is also, incidentally, just the tip of the iceberg.
4) I was also unsure about where to draw the line between translating an English word to Tamil and retaining the English word. In several cases, I used my familiarity with the words in a technical context to make such a decision. Since I also relied quite a bit on online dictionaries, and cross checked them across websites to be sure, I cannot vouch for all of them, and probably quite a few have been excessively Tamilised, or retained in English even when a patently viable and common alternative exists. I hope some others can account for those
Close#11579
Preferences Dialog - MultiInstance UI:
1. Increased the height of the 1st groupbox by 3 units.
2. Shifted the controls inside it by 4 units.
3. Reduced the height of the 2nd groupbox by 3 units.
4. Shifted the groupbox top and the checkbox only down by 3 units.
Style Configurator Dialog:
5. Added 'BS_CENTER' modifier to "Font Style" & "Colour Style" groupboxes.
Fix#11590, close#11591
In Scintilla4 reloaded document keeps its syntax highlighting without re-applying the lexer for its syntax highlighting.
It seems the behaviour has been changed in Scintilla5. Hence this workaround to force to apply syntax highlighting after reloading.
Fix#11606, close#11610
Add APIs: 2 new messages NPPM_ISDARKMODEENABLED & NPPM_GETDARKMODECOLORS, and 1 new notification NPPN_DARKMODECHANGED.
Fixed also a bug in dark mode for PushLike CheckBoxes.
Fix#11546, close#11547
Fix case-conversion code to handle changing string lengths:
Fixes an issue where, e.g., upper-casing U+2C65 adds garbage to the
document because its capital form U+023A has a shorter UTF-8 encoding.
Incidentally fixes another bug: rows would be truncated at the first
NUL when changing case in column mode.
Fix#11463, close#11464
This is a regression of upgrading Scintilla from 4.x to 5.x due to concerning Scintilla APIs having changed their behaviour.
This PR follows the new instructions of Scintilla documentation to make it work again.
Fix#11433, close#11433
- Edit control in Date Time for Custom format
- Tooltip in Delimiter for Word character list
- Fix blurry text in Link for Clickable Link Settings
Fix#11497, close#11498
For the sake of maintenance of Scintilla (future update), we try to not modify Scintilla project, or at least minimize its modification.
Hence the compiling boost part is shifted to Notepad++ project.
Fix#11014, close#11485
Scrolling "Document List" to make the selected item visible after:
- selecting
- opening a file or files
- the program startup
- adding/removing columns
This commit doesn't cover the case of the selected item becoming invisible after resizing of the window.
Fix#11204, close#11471
* Add new preference setting to allow function list to be sorted lexicographically by default.
* Fix sorting for mixed mode function list parsers on new file open.
* Add new translations to english.xml and german.xml.
Fix#11446, close#11447
1. Scintilla and Lexilla intermediate files are created in the same folder as NPP build file (`bin.i686.build` or `bin.x86_64.build`), but in subfolder `_lexilla.build` and `_scintilla.build`. I added `_` char at the beginning so these folders are always at the beginning. If you prefer a different name or location it can be change.
2. Stop build and dispaly error message when someone run "outside build" (use `-f` option) and source path has any spaces. It won't work anyway, so it's worth stopping the process and give a clear message.
3. Add new phony target `sciclean` and `lexclean` for deleting Scintilla or Lexilla intermediate files separately.
4. Change `_` to `|` for temporary replacement of space characters when detect proper shell. Char `_` is allowed in paths and should not be used for that purpose.
5. Add one more condition for `MAKELEVEL` variable to prevent unnecessary second calls to Scintilla and Lexilla makefile.
6. Update also `nppSpecifics_mingw.mak` file to works with above change.
Now we don't have to remember to clean up the previous files when we switch to different compiler (32-bit or 64-bit) or when we generate a debug version.
Fix 10991, close#11450
Make external lexer library work again after upgrading to Scintilla5.
Old external lexer libraries needs to add CreateLexer export function which returns ILexer5 instance (Lexilla protocol interface of Scintilla5).
Tested with papyrus lexer plugin, this external lexer plugin is compatible with Notepad++ next release:
https://github.com/blu3mania/npp-papyrusClose#11468
Update with https://www.scintilla.org/scintilla521.ziphttps://www.scintilla.org/lexilla515.zip
- fix setting to bring Scintilla::PositionCR from ScintillaStructures.h inline with Sci_Position.h Sci_PositionCR
- add workaround to enable lexer for searchResult
commented out SCI_SETILEXER call on searchResult to get one result which is correctly handled by the lexer,
added comment about the current problem with property @MarkingsStruct which seems to disappear after call to SCI_SETILEXER or CreateLexer
- corrected usage of ObjC lexer
- removed unnecessary filter stuff
- use own sections for scintilla and lexilla build targets and allow parallel builds
- as libscilex is no longer existing, changed to libscintilla
- adapt makefiles and cmake
- use VS2019
- started simple changes for createlexer adaptations, nullpointercheck missing on return of lexer name from deprecated LexerNameFromID -> undefined behaviour
- movement from id -> lexer name, mostly done via LexerNameFromID + switching off corresponding compiler warning
- changed to SCI_SETILEXER from SCI_SETLEXER, SCI_SETLEXERLANGUAGE needs to be corrected, see Scintilla5Migration.html
- just commented out: SCI_LOADLEXERLIBRARY
Fix#10504, close#11419
* move labels to resemble v8.2 positioning
* resize IDD_FINDINFILES_DIR_COMBO to make it end with the other comboboxes
* resize IDD_FINDINFILES_BROWSE_BUTTON to match combobox height
* make IDD_FINDREPLACE_SWAP_BUTTON in line with IDD_FINDINFILES_BROWSE_BUTTON
* expand GroupBox to allow for a wider IDREDOTMATCHNL
* expand IDREDOTMATCHNL
* improve scaling algorithm for those ComboBoxes
Fix#11318, close#11386
In commit f9118dd13c **"npp-compatible-versions"** has been added in plugin list for helping not only Plugin Admin, but also Plugin Manager (Plugin Loader) to check the compatibility with the latest version of plugin (if the version of installed plugin is the latest one).
However, if the version of installed plugin is the previous one, there's no info to know if this plugin with old version is compatible with running Notepad++. In order to filter better old version plugins, **"old-versions-compatibility"** is added in plugin list, so Plugin Manager can use it to check the compatibility to decide load it or not.
The value of "old-versions-compatibility" is a string made by 2 interval versions as following:
`"old-versions-compatibility": "[,2.6][,8.2.1]"`
The first interval versions are for old plugin versions: [,2.6] means from all the versions to v2.6 included.
The second interval versions are for Notepad++ versions: [,8.2.1] means from all the versions to v8.2.1 included.
Both interval versions together means: the plugin in question from the 1st version to v2.6 is compatible with Notepad++ v8.2.1 and all Notepad++ previous versions.
Here is the sample:
```json
{
"folder-name": "mimeTools",
"display-name": "Mime tools",
"version": "2.7",
"npp-compatible-versions": "[8.3,]",
"old-versions-compatibility": "[,2.6][,8.2.1]",
"id": "b65fbfaa15b443131eb69188069cacbff04eca66e0cb84130631303a1d3895f8",
"repository": "https://github.com/npp-plugins/mimetools/releases/download/v2.7/mimetools.v2.7.zip",
"description": "Implements several main functionalities defined in MIME.",
"author": "Don HO",
"homepage": "https://github.com/npp-plugins/mimetools"
},
```
Considering these 2 scenarios:
1. The current distributed plugin version is v2.7 (the latest one normally), and it is compatible with all Notepad++ version from v8.3. If installed MineTools plugin is v2.7 and running Notepad++ is v8.3.3 then it's OK, and MineTools v2.7 will be loaded.
2. If installed MineTools plugin is v2.6 and running Notepad++ is v8.3.3 then Plugin Manager learns it's a previous version (v2.6 < v2.7), so it will check "old-versions-compatibility" - it will find v2.6 is in the 1st interval [,2.6] - it's matched, then Plugin Manager keep checking the running Notepad++'s compatibility: v8.3.3 is not in the 2nd interval [,8.2.1] - it's not compatible, then MineTools plugin v2.6 won't be loaded.
Here are the test instructions for this PR:
1. download x64 debug binary here:
https://ci.appveyor.com/api/buildjobs/5ba501ecu21k28i7/artifacts/Notepad%2B%2B.x64.Debug.exe
2. Create an empty file "nppPluginList.json" in your `npp\plugins\Config\`
and copy the following content
5e23fce868/src/pl.x64.json
and paste into `npp\plugins\Config\nppPluginList.json`
You have to copy "updater" folder (which contains GUP.exe) to enable plugin list.
3. Download DSpellCheck plugin v1.4.22 which is not compatible with Notepad++ from v8.3 and later version here:
https://github.com/Predelnik/DSpellCheck/releases/download/v1.4.22/DSpellCheck_x64.zip
Install it into plugin folder manually.
4. Now launch Notepad++ x64 debug binary and watch it crash.
5. Edit "nppPluginList.json" by adding `"old-versions-compatibility": "[,1.4.22][,8.2.1]",` into DSpellCheck section.
6. Startup Notepad++. Notepad++ doesn't crash. and now you can check DSpellCheck plugin is not loaded on the startup.
Fix #11358, fix#11349, close #11356
For some reason, the file name ComboBox isn't present when enumerating windows in OnFolderChange().
Because of that, we can't call onPreFileOk() in keyboard hook procedure.
Fix that by retrying window search in OnSelectionChange() if we didn't find them previously.
Fix#11305, fix#11355
A new ability for checking plugins' compatibility with running Notepad++ has been added in Plugin List & Plugin Admin (a06b404708).
This PR extends this ability by using Plugin Admin's plugin list to filter plugins to load - if any plugin to load with **the same folder name**, **the same version** (as in the plugin list) and it's **not compatible** with the running Notepad++ version found while loading plugins, it will be skipped for being loaded.
Fix#11353, close#11350
4 new API are added:
- NPPM_GETEXTERNALLEXERAUTOINDENTMODE
- NPPM_SETEXTERNALLEXERAUTOINDENTMODE
- NPPM_ISAUTOINDENTON
- NPPM_GETCURRENTMACROSTATUS
* Added support for custom auto-indentation for external lexer.
* Also added messages to fetch current Macro status (Idle, Recording, Stopped, Running) -> for this also affects auto-indentation behavior.
* Also added capability to query for the current User Settings of "Use Auto Indentation".
Fix#11253, close#11278
Implement: https://github.com/notepad-plus-plus/nppPluginList/issues/416
While PluginAdmin loading nppPluginList.dll, it will check an attribute "npp-compatible-versions" (optional),
in order to determinate if plugin is compatible to the current version of Notepad++. If plugin is not compatible,
then this plugin will be ignored, therefore it won't be shown on the PluginAdmin's plugin list.
Note that it's only about pluginsAdmin's plugin list:
it prevent from Notepad++ install/update a plugin non-compatible to current version of Notepad++,
but it still allows Notepad++ load this plugin in question, if it's already installed.
Here is the attribite "npp-compatible-versions" looks like in plugin list json file:
```
{
"name": "npp-pluginList",
"version": "1.4.7",
"arch": "32",
"npp-plugins": [
{
"folder-name": "demoPluginA",
"display-name": "Demo Plugin A",
"version": "1.8.7",
"npp-compatible-versions": "[4.2,6.6.6]",
"id": "9c566a9083ef66a0ce93a3ce5f55977faea559b5b0993e37a1461b87f4aeb6f0",
...
},
{
"folder-name": "demoPluginB",
"display-name": "Demo Plugin B",
"version": "1.1.8.7",
"id": "8a6b9dadbf2ec37d5c60a12a5445f0eec2ef00e6eaa80452925789fd73950193",
...
},
...
}
}
```
It's optional. In the case of its absence, it's considered compatible to all versions of Notepad++.
The format of value for "npp-compatible-versions" is following (no white space is allowed):
"6.9" : exact version 6.9
"[4.2,6.6.6]" : from version 4.2 to 6.6.6 inclusive
"[8.3,]" : any version from 8.3 to the latest one
"[,8.2.1]" : 8.2.1 and any previous version
Fix#11338, close#11334
* add goToCenter to hotkey check in IDM_SEARCH_(FIND|REPLACE|FINDINFILES|MARK)
Before commit aa69711d it was possible to center the dialog on Notepad++ using a second CTRL+F but was lost during the implementation of #10019, #10177.
This will re-add the function:
* When the hotkey used is not associated with the current tab, it will switch to the new tab (as before).
* If the hotkey used is associated with the current tab, it will center the FindReplaceDlg on Notepad++.
Fix#9201, close#11323
Crash regression has been inserted by #11258.
The 2GB+ adaptation has forced change in integers saving via TinyXML (now saved indirectly as strings). While the MapPosition part has been already fortified against possible missing session-file items, the Position part not. So implemented likewise the MapPosition way.
Fix#11325, close#11327