TortoiseGit 右键菜单 全部折叠到二级菜单中

TortoiseGit 和 TortoiseSVN 都安装时,右键菜单会很长,尝试将 TortoiseGit 的 Clone 菜单折叠到二级菜单中

默认效果:

太占空间,希望能把两个菜单折叠到一个里。

查找资料

  • google,百度 查找右键菜单。

  • 查找折叠菜单,二级菜单,均没有实现。

解决办法

  • 上面百度到右键菜单在注册表相关,桌面右键为例:

普通右键菜单:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shell
可以看到下面有 “在此处运行 CMD”
COM组件右键菜单:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\Background\shellex
可以看到下面有 TortoiseGit 和 TortoiseSVN 和其他的(新建,分享,小工具)。

  • 实验解决办法 一(未成功)

在 shell 下创建子菜单,将 COM 组件的菜单移到里面。失败。。。。

  • 实验解决办法 二 (成功)

突然想到 这个是开源项目啊,还有一个修改代码实现的方法,查看 TortoiseGit 右键菜单的 CLSID :
{10A0FDD2-B0C0-4CD4-A7AE-E594CE3B91C8}
可以看到注册的 dll 文件:
TortoiseGitStub.dll

TortoiseGit 源码编译

  • TortoiseGit 的源码在 gitlab, clone 下来

git clone https://gitlab.com/tortoisegit/tortoisegit.git

克隆的有点慢,可以设置下代理 😉:

git config --global http.proxy "10.0.1.1:1080"
git config --global https.proxy "10.0.1.1:1080"
  • 我现在用的是官网最新稳定版 2.5

看下tag,切换到 2.5
git checkout REL_2.5.0.0_EXTERNAL
查看 build.txt,依次 加载子模块,补丁。

git submodule update --init
cd ext/libgit2
for %%G in (..\libgit2-*.patch) do ( type %%G | git am --3way )

编译工程 TortoiseShell 完成得到 TortoiseGit.dll,后面浏览代码发现菜单添加在这里面。

修改代码

  • 工程 TortoiseShell 中 ContextMenu.cpp:1047
bIsTop = ((topmenu & menuInfo[menuIndex].menuID) != 0);
//bIsTop = false;
// insert the menu entry
InsertGitMenu(	bIsTop,
	bIsTop ? hMenu : subMenu,
	bIsTop ? indexMenu++ : indexSubMenu++,
	idCmd++,
	menuInfo[menuIndex].menuTextID,
	bShowIcons ? menuInfo[menuIndex].iconID : 0,
	idCmdFirst,
	menuInfo[menuIndex].command,
	uFlags);

简单的修改了 bIsTop,导致问是 最前面不会添加 "Git ",影响不大。

  • 编译出 TortoiseGit.dll

替换和删除会不允许,但是可以重命名。放入新的之后重启资源管理器

taskkill /f /im explorer.exe && start explorer

最后效果:

下载地址

TortoiseGit.zip


TortoiseSVN 的后面有时间再看看。。。