Skip to content

Add Folder comparison mode with archive extraction support#3320

Merged
sdottaka merged 13 commits intomasterfrom
feature/new-folder-comparison
Apr 19, 2026
Merged

Add Folder comparison mode with archive extraction support#3320
sdottaka merged 13 commits intomasterfrom
feature/new-folder-comparison

Conversation

@sdottaka
Copy link
Copy Markdown
Member

@sdottaka sdottaka commented Apr 13, 2026

Summary

Add Folder comparison mode with automatic archive extraction via 7-Zip.

Details

  • New /t folder and "New Folder"
  • "Compare As → Archive" (mapped to Folder)
  • Extracts supported files (e.g. EXE/DLL) as archives when possible

Screenshots

New menu (Folder option)

image

Compare As (Archive option)

image

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a new “Folder” comparison type so users can create new folder comparisons directly from the File → New menu (2-pane and 3-pane), and exposes the same capability via command-line and Jump List tasks.

Changes:

  • Add new command/resource IDs, menu items, and icons for “New Folder” (2/3 panes) and “Compare As → Folder”.
  • Implement folder-compare opening flow in CMainFrame (including temp-folder creation for “New Folder”).
  • Update command-line and manual translations/docs to include /t folder as a valid window type.

Reviewed changes

Copilot reviewed 31 out of 72 changed files in this pull request and generated 8 comments.

Show a summary per file
File Description
Translations/Docs/Manual/Japanese.po Updates manual translation strings to mention Folder window type.
Translations/Docs/Manual/Italian.po Updates manual translation strings to mention Folder window type (plus reflow).
Translations/Docs/Manual/Hebrew.po Updates manual translation strings to mention Folder window type.
Translations/Docs/Manual/French.po Updates manual translation strings to mention Folder window type and rewraps the entry.
Translations/Docs/Manual/English.pot Adds Folder to the /t window-type description source string.
Src/resource.h Adds IDs for folder compare/menu items/icon + adjusts ID ranges to include folder compare.
Src/res/new_folder.bmp Adds bitmap resource for “New Folder” menu icon.
Src/WebPageDiffFrm.cpp Extends “Recompare As” command/UI ranges to include folder compare.
Src/PropShell.cpp Adds “New Folder Compare” to user task selection list.
Src/OpenView.cpp Extends compare command/UI ranges to include folder compare.
Src/MergeDoc.cpp Extends “Recompare As” command range to include folder compare.
Src/MergeCmdLineInfo.h Adds FOLDER window type + user task flag for folder compare.
Src/MergeCmdLineInfo.cpp Parses /t folder and maps to the new window type.
Src/Merge2.rc Registers IDB_FILE_NEW_FOLDER bitmap resource.
Src/Merge.vcxproj.filters Adds Common\\ScopeExit.h to project filters.
Src/Merge.vcxproj Adds Common\\ScopeExit.h include to the project.
Src/Merge.rc Adds “New → Folder” and “Compare As → Folder” menu items + Jump List string.
Src/Merge.cpp Adds Jump List user task entry for “New Folder Compare”.
Src/MainFrm.h Adds ShowDirDoc(...) declaration and temp-folder lifetime storage.
Src/MainFrm.cpp Implements ShowDirDoc(...) and “New Folder” temp-folder creation in DoFileNew.
Src/ImgMergeFrm.cpp Extends “Recompare As” command/UI ranges to include folder compare.
Src/HexMergeDoc.cpp Extends “Recompare As” command/UI ranges to include folder compare.
Src/DirView.cpp Extends “Compare As” command/UI ranges to include folder compare; minor context-menu flow change.
Src/DirDoc.cpp Uses pane description as title when provided (useful for “Untitled” folder panes).
Src/Common/ScopeExit.h Adds a local scope_exit helper for scoped cleanup.
Src/7zCommon.h Declares Merge7zInit().
Src/7zCommon.cpp Defines Merge7zInit() that resets the thread-local Merge7z proxy.
Docs/Manual/Japanese/Command_line.xml Updates Japanese manual to include Folder keyword.
Docs/Manual/Italian/Command_line.xml Updates Italian manual to include Folder keyword.
Docs/Manual/Hebrew/Command_line.xml Updates Hebrew manual to include Folder keyword.
Docs/Manual/French/Command_line.xml Updates French manual to include Folder keyword.
Docs/Manual/English/Command_line.xml Updates English manual to include Folder keyword.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread Src/OpenView.cpp
Comment thread Translations/Docs/Manual/Italian.po Outdated
Comment thread Translations/Docs/Manual/Italian.po
Comment thread Docs/Manual/Italian/Command_line.xml Outdated
Comment thread Docs/Manual/Italian/Command_line.xml Outdated
Comment thread Src/MainFrm.cpp
Comment thread Src/7zCommon.cpp Outdated
Comment thread Src/MainFrm.cpp
@sdottaka sdottaka changed the title Add support for creating new folder comparisons directly from the "New" menu (both 2-pane and 3-pane). Add Folder comparison mode with archive extraction support Apr 19, 2026
@sdottaka sdottaka merged commit 41065fb into master Apr 19, 2026
4 checks passed
@sdottaka sdottaka deleted the feature/new-folder-comparison branch April 19, 2026 10:05
Marcellomco added a commit to Marcellomco/winmerge that referenced this pull request Apr 19, 2026
Added translation for "Add Folder comparison mode with archive extraction support (WinMerge#3320)"
@Marcellomco Marcellomco mentioned this pull request Apr 19, 2026
@Havoc7891 Havoc7891 mentioned this pull request Apr 19, 2026
sdottaka pushed a commit that referenced this pull request Apr 19, 2026
Added translation for "Add Folder comparison mode with archive extraction support (#3320)"
sdottaka added a commit that referenced this pull request Apr 23, 2026
* Doc - Italian language - Updated (#3319)

* Update Italian.po

* Fix issue #3321: [BUG] Incorrect string used with beta releases

* Show error message when entering path in header bar (#3322)

* Prioritize explicitly selected plugins over archive detection (#3324)

* Prioritize explicitly selected plugins over archive detection

* Update Src/7zCommon.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Src/7zCommon.cpp

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Use 7-Zip IsArc API for archive detection and refactor format guessing logic (#3323)

* Use 7-Zip IsArc API for archive detection and refactor format guessing logic

* Update ArchiveSupport/Merge7z/Merge7zCommon.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Restore extension-only fallback in GuessFormatEx and handle NEED_MORE result

Agent-Logs-Url: https://github.com/WinMerge/winmerge/sessions/47af4d0f-fc0a-4e33-ab81-8ec95c0f599e

Co-authored-by: sdottaka <98126+sdottaka@users.noreply.github.com>

* Use 7-Zip IsArc API for archive detection and refactor format guessing logic (2)

* Use 7-Zip IsArc API for archive detection and refactor format guessing logic (3)

* Prioritize explicitly selected plugins over archive detection

* Update Src/7zCommon.cpp

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update Src/7zCommon.cpp

* Update Merge7zCommon.cpp

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sdottaka <98126+sdottaka@users.noreply.github.com>

* Merge7z: Bump revision to 2600.1

* Merge7z: Bump revision to 2600.1 (2)

* Update French Manual (#3325)

* Refactor: unify open parameters and move recurse to OpenFolderParams (#3326)

* Update Manual/French.po

* Refactor: unify open parameters and move recurse to OpenFolderParams (#3326) (2)

(cherry picked from commit 83af229)

* Add Folder comparison mode with archive extraction support (#3320)

* Update Manual/French.po

* Update Brazilian.po (#3328)

Added translation for "Add Folder comparison mode with archive extraction support (#3320)"

* Update German.po (#3329)

* update zh-cn translation (#3331)

* Update Turkish.po (#3333)

New string entries

* Update Korean (#3334)

* Code review fixes for 5 oldest source files#3327 #1

* Code review fixes for 5 oldest source files#3327 #2

* Update Turkish.po

* Update TranslationsStatus

* Update ChangeLog&ReleaseNotes

* Italian language (#3335)

* Stabilize tree-sitter highlight precedence

Make overlapping captures resolve deterministically so syntax colors stay consistent across panes and languages. Also accept local.* capture prefixes so newer query conventions keep local symbol highlighting working.

* Unify tree-sitter block ordering

Use one parser-wide block order counter so injected-language highlights cannot collide with primary highlight ordering when the final precedence tie-breaker runs.

---------

Co-authored-by: bovirus <1262554+bovirus@users.noreply.github.com>
Co-authored-by: Takashi Sawanaka <sdottaka@users.sourceforge.net>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: sdottaka <98126+sdottaka@users.noreply.github.com>
Co-authored-by: t3chnob0y <t3chnob0y@users.noreply.github.com>
Co-authored-by: Marcellomco <70959309+Marcellomco@users.noreply.github.com>
Co-authored-by: René T. Nicolaus <12006431+Havoc7891@users.noreply.github.com>
Co-authored-by: YG <1246410+yingang@users.noreply.github.com>
Co-authored-by: bilimiyorum <131397022+bilimiyorum@users.noreply.github.com>
Co-authored-by: VenusGirl❤ <venusgirl@outlook.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants