dail8859 / NotepadNext

A cross-platform, reimplementation of Notepad++
GNU General Public License v3.0
9.01k stars 547 forks source link

[RFE] request for documentation on feature matrix parity with notepad++ #444

Closed hgkamath closed 1 year ago

hgkamath commented 1 year ago

Firstly thank-you to the developers.
The linux world has many advanced editors. Despite that, herein, I note two reasons why a need/niche for cross platform light-weight editors of the type such as notepad++ exists.

As it is true that notepad-next is supposed to be a re-implementation of notepad++ in C++ in order to be cross-platform, it is hence fair to expect their features to be compared.

This issue is to request a documentation file, doc/feature_matrix.md a checkbox-listing, which details features in notepad-next and notepad++ and their status. Such file will probably also double up as a developer todo list. and may even encourage others to become contributors. The list could be ordered to have 3 top-level sections

  1. Features that notepad++ does not have (or does not make sense to have) but notepad-next has or will have
  2. Features that notepad++ has and notepad-next has already caught up to or will eventually catch up to. This section could be broken into a long term, mid-term, short-term, and done
  3. Features present in notepad++ that notepad-next will never do (as maybe it does not make sense to have)

The documentation file will need to be updated periodically whenever there is a version update to either notepad++/notepad-next. ie when features are added/deprecated in notepad++ as well as added/deprecated in notepad-next.

Examples of feature matrices:

dail8859 commented 1 year ago

IMHO, Lightweight editors should be less than 3Mb

3MB is quite tiny compared to today's standards. Possible, yes; but would require removing most features. If you then want to have a cross platform application...it would only increase the size due to all the OS abstraction.

As for the request, I have no desire to document this. Mostly because I can't answer a lot of it. I don't know what will be implemented or what won't be. There's already features I've implemented I thought at one time I never would. There's also other things that might turn out to be too complicated or require too much maintenance. I also don't know when something might get implemented. It is mostly just what interests me at the time.

If someone is interested in contributing non-trivial features to the project I'd encourage them to start a discussion to talk about it. There is certainly lots of room for improvement.

hgkamath commented 1 year ago

no pressure. Do as you see fit. Its also true that sometimes comparing a software at v0.67 against one that is at v8.5.7 is unfair. Nevertheless, I'll just attempt a list here. Give me a day to populate this, after that I will stop. You can use it like a stub-file, reorganize/reformat it, if you ever choose to do it.

Feature✅/❌ notepad++ notepad-next notes
Feat/Session Management -
Feat/Lua engine under the hood -
Feat/Projects level containing workspaces -
Feat/Dual pane Views -
Feat/Clipboard history -
Feat/Search History -
Feat/Multiple buffers for tabs, views -
Titlebar/current tab filename, with change ind -
Menu -
Menu/File -
Menu/File/New -
Menu/File/Open -
Menu/File/Open cnt-folder in explorer -
Menu/File/Open cnt-folder in cmd prompt -
Menu/File/Open cnt-folder as workspace -
Menu/File/Open in default viewer Use OS file mgr to open
Menu/File/Reload -
Menu/File/Save -
Menu/File/Save As -
Menu/File/Save Copy -
Menu/File/Save All -
Menu/File/Export/RTF -
Menu/File/Export/HTML -
Menu/File/Rename -
Menu/File/Close tab -
Menu/File/Close all -
Menu/File/Close all but current tab -
Menu/File/Close all to the left -
Menu/File/Close all to the right -
Menu/File/Close all unchanged -
Menu/File/Move to recycle bin -
Menu/File/Load Session -
Menu/File/Save Session -
Menu/File/Print -
Menu/File/Print to file maybe use pdf-printer or print-to-file
Menu/File/Exit -
Menu/Edit -
Menu/Edit/Undo -
Menu/Edit/Redo -
Menu/Edit/Cut -
Menu/Edit/Copy -
Menu/Edit/Paste -
Menu/Edit/Delete -
Menu/Edit/Select All -
Menu/Edit/Select next instance -
Menu/Edit/Begin-End Select -
Menu/Edit/Begin-End Select in col mode -
Menu/Edit/Copy fullpath filename -
Menu/Edit/Copy filename -
Menu/Edit/Copy dirpath -
Menu/Edit/Copy all filenames -
Menu/Edit/Copy all fullpath filenames -
Menu/Edit/Copy content As HTML -
Menu/Edit/Copy content As RTF -
Menu/Edit/Insert date-time short -
Menu/Edit/Insert date-time long -
Menu/Edit/Insert date-time customized -
Menu/Edit/Indent increase -
Menu/Edit/Indent decrease -
Menu/Edit/convertcase uppercase -
Menu/Edit/convertcase lowercase -
Menu/Edit/convertcase propercase -
Menu/Edit/convertcase propercase Blend -
Menu/Edit/convertcase sentencecase -
Menu/Edit/convertcase sentencecase Blend -
Menu/Edit/convertcase invertcase -
Menu/Edit/convertcase randomcase -
Menu/Edit/autocompletion -
Menu/Edit/autocompletion function -
Menu/Edit/autocompletion word -
Menu/Edit/autocompletion fn param hint -
Menu/Edit/autocompletion fn param next hint -
Menu/Edit/autocompletion fn param prev hint -
Menu/Edit/autocompletion path completion -
Menu/Edit/blank operations -
Menu/Edit/blank ops trim trl spc -
Menu/Edit/blank ops trim ld spc -
Menu/Edit/blank ops trim ld & trl -
Menu/Edit/blank ops EOL to spc -
Menu/Edit/blank ops trim both and EOL to spc -
Menu/Edit/blank ops tab to space -
Menu/Edit/blank ops space to tab -
Menu/Edit/blank ops space to tab leading -
Menu/Edit/line operations -
Menu/Edit/line ops dup curr line -
Menu/Edit/line ops remove dup lines -
Menu/Edit/line ops remove consec dup lines -
Menu/Edit/line ops split line -
Menu/Edit/line ops join lines -
Menu/Edit/line ops move sel lines up -
Menu/Edit/line ops move sel lines down -
Menu/Edit/line ops move curr line up maybe redundant with mov sel lines
Menu/Edit/line ops move curr line down maybe redundant with mov sel lines
Menu/Edit/line ops remove empty lines -
Menu/Edit/line ops remove empty lines w blnk -
Menu/Edit/line ops insert blnk line above curr -
Menu/Edit/line ops insert blnk line below curr -
Menu/Edit/line ops reverse line order -
Menu/Edit/line ops randomize line order -
Menu/Edit/line ops sort lex A/D -
Menu/Edit/line ops sort lex ign case A/D -
Menu/Edit/line ops sort by integer A/D -
Menu/Edit/line ops sort by dec comma A/D -
Menu/Edit/line ops sort by dec dot A/D -
Menu/Edit/Encoding -
Menu/Edit/Encoding Base64 encode -
Menu/Edit/Encoding Base4 decode -
Menu/Edit/Encoding URL encode -
Menu/Edit/Encoding URL decode -
Menu/Edit/single line comment toggle -
Menu/Edit/single line comment -
Menu/Edit/single line uncomment -
Menu/Edit/block comment -
Menu/Edit/block uncomment -
Menu/Edit/EOL conversion -
Menu/Edit/EOL conversion CRLF -
Menu/Edit/EOL conversion CR -
Menu/Edit/EOL conversion LF -
Menu/Edit/Column Mode -
Menu/Edit/Column Editor -
Menu/Edit/ASCII char insertion panel -
Menu/Edit/Tab set readonly -
Menu/Edit/Tab unset readonly -
Menu/Edit/Clipboard History toggle right sidebar -
Menu/Search -
Menu/Search/Find -
Menu/Search/Find/toggle-simple-dlg -
Menu/Search/Find/Find status bar -
Menu/Search/Find/backwards -
Menu/Search/Find/match whole word -
Menu/Search/Find/match case -
Menu/Search/Find/wrap around -
Menu/Search/Find/mode/normal -
Menu/Search/Find/mode/extended -
Menu/Search/Find/mode/regexp -
Menu/Search/Find/regexp-dot -
Menu/Search/Find/find next -
Menu/Search/Find/find all in current doc -
Menu/Search/Find/find all in all open docs -
Menu/Search/Find/close dialog wonder what the purpose of this is
Menu/Search/Find/transparency -
Menu/Search/Find/transparency/always -
Menu/Search/Replace -
Menu/Search/Replace/toggle-simple-dlg -
Menu/Search/Replace/swap s r -
Menu/Search/Replace/copy s to r -
Menu/Search/Replace/copy r to s -
Menu/Search/Replace/Find status bar -
Menu/Search/Replace/backwards -
Menu/Search/Replace/match whole word -
Menu/Search/Replace/match case -
Menu/Search/Replace/wrap around -
Menu/Search/Replace/mode/normal -
Menu/Search/Replace/mode/extended -
Menu/Search/Replace/mode/regexp -
Menu/Search/Replace/regexp-dot -
Menu/Search/Replace/find next -
Menu/Search/Replace/replace -
Menu/Search/Replace/replace all in all open docs -
Menu/Search/Replace/close dialog wonder what the purpose of this is
Menu/Search/Replace/transparency -
Menu/Search/Replace/transparency/always -
Menu/Search/Find in Files -
Menu/Search/Find in Projects -
Menu/Search/Find Next -
Menu/Search/Find Prev -
Menu/Search/Select and Find Next -
Menu/Search/Select and Find Prev -
Menu/Search/Find volatile next -
Menu/Search/Find volatile prev -
Menu/Search/Replace -
Menu/Search/Incremental Search -
Menu/Search/Search Results Window -
Menu/Search/Next search result -
Menu/Search/Prev search result -
Menu/Search/Goto Line -
Menu/Search/Goto Line Offset -
Menu/Search/Goto matching brace -
Menu/Search/Select all between matching braces -
Menu/Search/Mark Dialog -
Menu/Search/Mark Dialog/mark all -
Menu/Search/Mark Dialog/transparency -
Menu/Search/Mark Dialog/clear mark -
Menu/Search/Mark Dialog/copy marked text -
Menu/Search/Change History Next -
Menu/Search/Change History Prev -
Menu/Search/Change History clear all -
Menu/Search/Find Characters in range ASCII -
Menu/Search/Find Characters in range Ext-ASCII -
Menu/Search/Find Characters in range custom range -
Menu/Search/Find Characters in range unicode -
Menu/Search/Bookmarks -
Menu/Search/Bookmarks/Toggle bookmark -
Menu/Search/Bookmarks/Next bookmark -
Menu/Search/Bookmarks/Prev bookmark -
Menu/Search/Bookmarks/Clear bookmarks -
Menu/Search/Bookmarks/Cut bookmark -
Menu/Search/Bookmarks/Copy bookmark -
Menu/Search/Bookmarks/Paste(replace) bookmark -
Menu/Search/Bookmarks/Remove bookmarked -
Menu/Search/Bookmarks/Remove nonbookmarked -
Menu/Search/Bookmarks/Inverse bookmarks -
Menu/Search/Mark Style/select style for all tokens -
Menu/Search/Mark Style/select style for current token -
Menu/Search/Mark Style/jump up to style -
Menu/Search/Mark Style/jump down to style -
Menu/Search/Mark Style/clear selected style -
Menu/Search/Mark Style/copy styled text -
Menu/View -
Menu/View/Always on top Maybe use an external tool stickit!
Menu/View/Full screen (distraction free) mode -
Menu/View/post-it mode -
Menu/View/Show Symbol/spc+tab -
Menu/View/Show Symbol/end-of-line -
Menu/View/Show Symbol/all-char -
Menu/View/Show Symbol/printing-char -
Menu/View/Show Symbol/control-char -
Menu/View/Show Symbol/indent-guide -
Menu/View/Show Symbol/wrap-symbol -
Menu/View/view current file in browser -
Menu/View/Zoom in -
Menu/View/Zoom out -
Menu/View/Restore Zoom -
Menu/View/View (pane) move to other -
Menu/View/View (pane) clone to other -
Menu/View/View (pane) move to new inst -
Menu/View/View (pane) open in new inst -
Menu/View/View (pane) switch focus to other -
Menu/View/Toggle word wrap -
Menu/View/Toggle showing of search results -
Menu/View/Tab next tab -
Menu/View/Tab prev tab -
Menu/View/Tab goto tab # -
Menu/View/Tab apply color tab -
Menu/View/Tab remove color tab -
Menu/View/Tab move curr tab forward -
Menu/View/Tab move curr tab backward -
Menu/View/Hide Lines -
Menu/View/Code Folding -
Menu/View/Code Folding/Fold all -
Menu/View/Code Folding/Unford all -
Menu/View/Code Folding/Fold curr level -
Menu/View/Code Folding/Unfold curr level -
Menu/View/Code Folding/Fold to level -
Menu/View/Code Folding/Unfold to level -
Menu/View/Summary counts -
Menu/View/Project Panel-s -
Menu/View/Folder as workspace -
Menu/View/Document Map -
Menu/View/Document List -
Menu/View/Function List -
Menu/View/Synchronize Vert scrolling -
Menu/View/Synchronize Horz scrolling -
Menu/View/Text Direction RTL -
Menu/View/Text Direction LTR -
Menu/View/Monitoring tail-f -
Menu/Encoding -
Menu/Encoding/ANSI -
Menu/Encoding/UTF8 -
Menu/Encoding/UTF8-BOM -
Menu/Encoding/UTF8-BE-BOM -
Menu/Encoding/UTF8-LE-BOM -
Menu/Encoding/ISO-charsets -
Menu/Encoding/interconversions -
Menu/Language -
Menu/Language/User Defined Language -
Menu/Settings -
Menu/Settings/pref//General/hide toolbar -
Menu/Settings/pref//General/hide menubar -
Menu/Settings/pref//General/hide statusbar -
Menu/Settings/pref//restore prev session on start -
Menu/Settings/pref//restore prev session unsaved -
Menu/Settings/pref//restore prev session tmp files -
Menu/Settings/pref/many others got lazy
Menu/Settings/combine search results -
Menu/Settings/shortcut mapper -
Menu/Settings/style configurator -
Menu/Tools -
Menu/Tools/Digests one could use powershell/linux tools
Menu/Tools/Digest-MD5 -
Menu/Tools/Digest-SHA1 -
Menu/Tools/Digest-SHA256 -
Menu/Tools/Digest-SHA512 -
Menu/Tools/Digest-generate -
Menu/Tools/Digest-generate-from-clipboard -
Menu/Tools/Digest-generate-from-files -
Menu/Macros -
Menu/Macros/save macro -
Menu/Macros/run macro -
Menu/Macros/save recorded macro -
Menu/Macros/macro manager-editor -
Menu/Macros/run macro multiple times -
Menu/Macros/trim trailing whitespaces -
Menu/Run -
Menu/Plugins -
Menu/Window -
Menu/Window/view tabs Manager DLG -
Menu/Window/sort tabs in view -
Menu/Window/entries to tabs in view -
Menu/Help -
Menu/Help/command line args -
Menu/Help/lua console -
Menu/Help/editor inspector -
Menu/Help/language inspector -
Menu/Help/hex viewer -
Menu/Help/debug info -
Menu/Help/auto-update not required maybe
Menu/Help/manual ver specific online/local -
Workspace -
Toolbar -
Toolbar/new -
Toolbar/open -
Toolbar/save -
Toolbar/saveall -
Toolbar/close -
Toolbar/closeall -
Toolbar/print -
Toolbar/cut -
Toolbar/copy -
Toolbar/paste -
Toolbar/undo -
Toolbar/redo -
Toolbar/findDLG -
Toolbar/replaceDLG -
Toolbar/zoom-in -
Toolbar/zoom-out -
Toolbar/synchronize horz scrolling -
Toolbar/synchronize vert scrolling -
Toolbar/wordwrap -
Toolbar/show-all-char -
Toolbar/show-indent-guide -
Toolbar/Define your language -
Toolbar/Document map -
Toolbar/Document List -
Toolbar/Function List -
Toolbar/Folder as Workspace -
Toolbar/tail-f monitoring -
Toolbar/macro/record macro -
Toolbar/macro/stop record macro notepad++ has dedicated stop button
Toolbar/macro/run macro -
Toolbar/macro/stop play macro notepad++ has dedicated stop button
Toolbar/macro/run macro multiple times -
Toolbar/macro/save macro -
Toolbar/tab/standalone-new-tab-button -
Toolbar/standalone-tab-list -
Toolbar/standalone-close-current-tab -
Dual view -
Multitabs -
Multitabs/tab/file-type icon on tab -
Multitabs/tab/file-name on tab -
Multitabs/tab/close-button on tab -
Multitabs/tab/close-current -
Multitabs/tab/close-all-but-this -
Multitabs/tab/close-all-to-the-left -
Multitabs/tab/close-all-to-the-right -
Multitabs/tab/close-all-unchanged -
Multitabs/tab/save -
Multitabs/tab/save-as -
Multitabs/tab/rename -
Multitabs/tab/reload -
Multitabs/tab/move-to-recycling-bin -
Multitabs/tab/print -
Multitabs/tab/set-readonly -
Multitabs/tab/clear-readonly -
Multitabs/tab/ -
Multitabs/tab/ -
Multitabs/tab/copy-to-clipboard full-filepath -
Multitabs/tab/copy-to-clipboard filename -
Multitabs/tab/copy-to-clipboard dirpath -
Multitabs/tab/apply color to tab -
Multitabs/tab/move to other view -
Multitabs/tab/open in new instance -
Multitabs/tab/move to new instance -
Multitabs/tab/open folder in explorer -
Multitabs/tab/open folder in command prompt -
Multitabs/tab/open folder as workspace -
Status bar -
Status bar/filetype -
Status bar/size -
Status bar/length -
Status bar/line no -
Status bar/col no -
Status bar/pos no -
Status bar/sel length -
Status bar/sel no -
Status bar/line-terminator -
Status bar/encoding -
Status bar/INS-OVR-indicator -
Text/context menu ~ ~ forgot to do
window resize -
dail8859 commented 1 year ago

@hgkamath I appreciate the time and effort, I'm still not quite sure if it is worth having within the repository.

Part of the problem is how granular do you get?

If you compare more high-level features, it might be in both applications but work the same, or completely differently, or close.

If you compare lower-level features then the list is huge and cumbersom as you start documenting each menu, button, option, etc.


The project is meant to use Notepad++ as a good target, but not intended to be a true 'source of truth' as to how or what should be implemented within Notepad Next.

hgkamath commented 1 year ago

Firstly, I am happy to say notepad-next is very good for my lightweight editor purposes. I'll stop now. ~I'll be uninstalling~ I have uninstalled notepad++

This is a surface-level GUI comparison, on start in the default settings and default text-mode. There are certainly other features not immediately apparent in the GUI, that aren't enumerated. Ex. like 'ask to save changed tab on close' . Yet other features, may reveal themselves only in specific situations, like sub-modes, file-type-context of cursor-on-word context. I was not a user of notepad++, so don't know much about this type of editor. But, I installed it so as to do the comparison. I mostly use neovim for code editing, and notepad/gedit for lightweight editing.

Part of the problem is how granular do you get?

I would have liked to get down to every configurable setting in every reachable GUI element that matters in the usage of a feature.
Due to laziness, I stopped enumerating subfeatures of a feature, when the feature itself did not exist, and felt like there was nothing to compare to.
For ex: Every configurable option in menu/settings/preferences is a subfeature in its own right. But presently much of this is omitted in the enumeration above. But the list so far seems good enough for the suggested purposes for now. The list could be expanded as needed, the moment a developer knows what they are going to tackle next. As I mentioned, it does work like a todo list. The feature enumeration needs to be from the perspective as seen by the users, not going into the design internals.

Another way to have done this comparison, it to first enumerate the features/operations that the editor-engine/lua-engine of each editor can do and then compare both lists. Then enumerate the corresponding settings that can be specified in a lua configuration file. Then also separately enumerate the shortcuts/main-menu/toolbars/context/menu/dialogs and other GUI elements exposing those features of each editor and again compare both lists. But rather than a user, this can only by done by a developer who knows what each engine can do. In theory, every editor-engine/lua-engine customizable option can have GUI controls repeated, trivially (by which I mean gui-elements only have to be coded to just call the hooks) provided in many aforementioned places.

not intended to be a true 'source of truth'

I understand. Its also the case that some of notepad++'s extra features may not be all that desirable. The exe will also bloat and become bulkier/slow-to-load if too many rarely used features are added.

Again, thank-you for notepad-next

dail8859 commented 12 months ago

Thanks for all your time put into this.

Again this is not something I'd be willing to put really any of my time into but I can understand the value that it has for people that are interested. If you'd like I can enable the wiki pages on this repository so the list you've generated so far can be put there for anyone else interested.

If you'd like to help maintain it, that would be greatly appreciated. Worst case scenario the list gets removed at a later date if it is severely outdated.