From 20b73fd979b6631d5686a8f961686f44c1aa7272 Mon Sep 17 00:00:00 2001 From: Crend King <975235+CrendKing@users.noreply.github.com> Date: Thu, 22 Apr 2021 15:34:29 -0700 Subject: [PATCH] Get ready for publishing --- .editorconfig | 8 ++++++ .gitignore | 46 +++++++++++++++++++++++------- README.md | 34 ++++++++++++++++++++++ build.ps1 | 11 ++++++++ compare_menu.vcxproj | 50 ++++++++++++++++++++++++++++++++- config.reg | Bin 0 -> 384 bytes install.bat | 2 ++ screenshots/compare_two.webp | Bin 0 -> 6518 bytes screenshots/select_first.webp | Bin 0 -> 6488 bytes screenshots/select_second.webp | Bin 0 -> 7882 bytes uninstall.bat | 2 ++ 11 files changed, 142 insertions(+), 11 deletions(-) create mode 100644 .editorconfig create mode 100644 build.ps1 create mode 100644 config.reg create mode 100644 install.bat create mode 100644 screenshots/compare_two.webp create mode 100644 screenshots/select_first.webp create mode 100644 screenshots/select_second.webp create mode 100644 uninstall.bat diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..86a14ca --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true diff --git a/.gitignore b/.gitignore index 4ce6fdd..529e13d 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,9 @@ # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs +# Mono auto generated files +mono_crash.* + # Build results [Dd]ebug/ [Dd]ebugPublic/ @@ -20,12 +23,15 @@ [Rr]eleases/ x64/ x86/ +[Ww][Ii][Nn]32/ [Aa][Rr][Mm]/ [Aa][Rr][Mm]64/ bld/ [Bb]in/ [Oo]bj/ +[Oo]ut/ [Ll]og/ +[Ll]ogs/ # Visual Studio 2015/2017 cache/options directory .vs/ @@ -39,9 +45,10 @@ Generated\ Files/ [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* -# NUNIT +# NUnit *.VisualState.xml TestResult.xml +nunit-*.xml # Build Results of an ATL Project [Dd]ebugPS/ @@ -56,6 +63,9 @@ project.lock.json project.fragment.lock.json artifacts/ +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + # StyleCop StyleCopReport.xml @@ -122,9 +132,6 @@ _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user -# JustCode is a .NET coding add-in -.JustCode - # TeamCity is a build add-in _TeamCity* @@ -135,6 +142,11 @@ _TeamCity* .axoCover/* !.axoCover/settings.json +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + # Visual Studio code coverage results *.coverage *.coveragexml @@ -182,6 +194,8 @@ PublishScripts/ # NuGet Packages *.nupkg +# NuGet Symbol Packages +*.snupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. @@ -206,6 +220,8 @@ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx +*.appxbundle +*.appxupload # Visual Studio cache files # files ending in .cache can be ignored @@ -255,7 +271,9 @@ ServiceFabricBackup/ *.bim.layout *.bim_*.settings *.rptproj.rsuser -*- Backup*.rdl +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl # Microsoft Fakes FakesAssemblies/ @@ -291,10 +309,6 @@ paket-files/ # FAKE - F# Make .fake/ -# JetBrains Rider -.idea/ -*.sln.iml - # CodeRush personal settings .cr/personal @@ -337,4 +351,16 @@ ASALocalRun/ .localhistory/ # BeatPulse healthcheck temp database -healthchecksdb \ No newline at end of file +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +release*.bat +*.zip diff --git a/README.md b/README.md index d645005..0626b7f 100644 --- a/README.md +++ b/README.md @@ -1 +1,35 @@ # Compare Menu + +A Windows context menu shell extension that proxies general comparison commands to any diff application. + +While many popular comparison applications such as Beyond Compare come with their own such shell extensions help improve user experience, there are good ones that still do not have. Rather than requesting each developer team to come up with their own solution, why not build a general one that can work everywhere as long as their take standard input arguments? + +The concept of such context menu is simple: + +* When exactly two files or two directories are selected, a "Compare Two" command becomes available, sending the two paths to the configured diff application. +* If only one object is selected for the first time, the menu remembers its path. +* If another object is selected afterwards, the menu either sends both paths to the diff application and reset, or replaces the previously remembered path, depending on user choice. + +Note that a file can't be compared to a directory. So if the types mismatch, "Compare Two" won't be available, and the only option for single select mode is replacement. + +## Install + +* Unpack the archive. +* Run install.bat to register the shell extension. +* Open config.reg and edit the application path. `\` in the path needs to be escaped as `\\`. +* The default arguments to the application is just the two paths. If a different one is needed, change the `ComparerArgs` value in config.reg. + +## Build + +A build script `build.ps1` is included to automate the process. It obtains dependencies and starts compilation. Before running `build.ps1`, make sure you have the latest Visual Studio installed. The script will automatically assume the Visual Studio developer environment and check out dependencies. To run the script, pass the target configuration and platform as arguments, e.g. `build.ps1 Debug x64` or `build.ps1 Release x86`. + +## Screenshots + +Compare Two +![Compare Two](screenshots/compare_two.webp) + +Select First +![Select First](screenshots/select_first.webp) + +Select Second +![Select Second](screenshots/select_second.webp) diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..04b734e --- /dev/null +++ b/build.ps1 @@ -0,0 +1,11 @@ +$vsPath = & "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" -nologo -utf8 -latest -property installationPath +Import-Module "${vsPath}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" +Enter-VsDevShell -VsInstallPath $vsPath -DevCmdArguments "-arch=amd64 -host_arch=amd64 -no_logo" -SkipAutomaticLocation + +Set-Location $PSScriptRoot + +$configuration = $args[0] +$platform = $args[1] + +MSBuild.exe -property:"Configuration=${configuration};Platform=${platform}" -maxCpuCount -nologo compare_menu.sln +exit $LASTEXITCODE diff --git a/compare_menu.vcxproj b/compare_menu.vcxproj index 6a2d559..f4fbbb5 100644 --- a/compare_menu.vcxproj +++ b/compare_menu.vcxproj @@ -51,18 +51,66 @@ + Unicode + v142 + true + true DynamicLibrary + + $(Platform)\$(Configuration)\ + $(SolutionDir)$(Platform)\$(Configuration)\ + true + false + $(ProjectName)_$(PlatformArchitecture) + + + Win32Proj + 16.0 + 10.0 + + + + + + + + + + + Use pch.h _USRDLL;%(PreprocessorDefinitions) + EnableFastChecks + ProgramDatabase + true + true + true + stdcpplatest + true + Disabled + WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) + _DEBUG;_WINDOWS;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + NDEBUG;_WINDOWS;%(PreprocessorDefinitions) + MultiThreadedDebugDLL + MultiThreadedDLL + true + true + true + Level3 src\$(ProjectName).def + true + DebugFastLink + true + Windows - \ No newline at end of file + diff --git a/config.reg b/config.reg new file mode 100644 index 0000000000000000000000000000000000000000..81cec91439580cb62827aeaccc82e0649876f971 GIT binary patch literal 384 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 literal 0 HcmV?d00001 diff --git a/screenshots/select_second.webp b/screenshots/select_second.webp new file mode 100644 index 0000000000000000000000000000000000000000..f3d89c57b00ce81be0a8d96acde098d369f6dc95 GIT binary patch literal 7882 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 literal 0 HcmV?d00001 diff --git a/uninstall.bat b/uninstall.bat new file mode 100644 index 0000000..f936205 --- /dev/null +++ b/uninstall.bat @@ -0,0 +1,2 @@ +regsvr32 /u "%~dp0compare_menu_64.dll" +regsvr32 /u "%~dp0compare_menu_32.dll"