Terminal: 更改 Windows 操作系统以支持默认终端 [defterm]

创建于 2019-05-07  ·  33评论  ·  资料来源: microsoft/terminal

此问题跟踪向 Windows 添加“默认终端”支持所需的工作。

这不是特定于终端的,但 Windows 终端将从中受益。


原创内容

此错误跟踪器由 Windows 控制台开发团队和其他技术类型监控。 我们喜欢细节!

如果您有功能请求,请发布到UserVoice

重要提示:报告 BSOD 或安全问题时,请勿将内存转储、日志或跟踪附加到 Github 问题。 相反,将转储/跟踪发送到[email protected] ,引用此 GitHub 问题。

请使用此表格并尽可能详细准确地描述您的问题

  • 您的 Windows 内部版本号: Microsoft Windows [Version 10.0.18885.1001]

  • 您正在做什么以及发生了什么:当我在 Windows 终端的命令提示符会话中键入start时,新的命令提示符窗口会在新的控制台窗口中打开。

  • 出了什么问题/应该发生什么:新的命令提示符应该在现有终端窗口的新选项卡中打开。

Area-Server Issue-Feature Product-Conhost Work-Item

最有用的评论

这是设计使然。

我们计划支持将另一个应用程序设置为 Windows 上的“默认终端”,但这些计划仍然非常粗略且正在实施中。

所有33条评论

这是设计使然。

我们计划支持将另一个应用程序设置为 Windows 上的“默认终端”,但这些计划仍然非常粗略且正在实施中。

这将需要操作系统功能。 我正在更新标题以表示默认终端操作系统更改。

我正在重命名它以将[defterm]关键字添加到末尾,以便我们可以在搜索中轻松找到它。 “默认”和“终端”这两个词在这个存储库中经常出现,令人震惊。 :微笑:

我很好奇 ConEmu 是如何做到这一点的。 安装后,每个新的 cmd/ps/bash 窗口都会在 ConEmu 中作为新选项卡打开

我很好奇 ConEmu 是如何做到这一点的。 安装后,每个新的 cmd/ps/bash 窗口都会在 ConEmu 中作为新选项卡打开

同样在这里,不确定如何,但希望 Windows 将被更新以完全支持终端。

我很好奇 ConEmu 是如何做到这一点的。 安装后,每个新的 cmd/ps/bash 窗口都会在 ConEmu 中作为新选项卡打开

ConEmu 可能正在(ab)使用为进程设置自定义调试器的能力。 我相信 Process Explorer 会做同样的事情来“替换”任务管理器

Process Hacker还支持“替换”任务管理器

我很好奇 ConEmu 是如何做到这一点的。 安装后,每个新的 cmd/ps/bash 窗口都会在 ConEmu 中作为新选项卡打开

ConEmu 可能正在(ab)使用为进程设置自定义调试器的能力。 我相信 Process Explorer 会做同样的事情来“替换”任务管理器

AFAIR,它只是更改了一个注册表项。

无论如何,ConEmu 设法做到这一点,所以 MST 也应该这样做。

ConEmu 将钩子 (DLL) 注入特定进程(例如 explorer.exe 或 devenv.exe),以拦截这些进程下新控制台窗口的创建。 您可以在官方文档中阅读更多相关信息: https ://conemu.github.io/en/DefaultTerminal.html

如该链接中所述,此方法纯粹是一种 _hack_。 它绝对不是 Windows 终端的可行解决方案。

但是……它有效。 访问整个子系统可以简化事情。

不同之处在于Windows TerminalMicrosoft官方产品,因此这里的期望是默认终端不会使用可扩展的丑陋黑客来更改,而是由Windows原生支持。

我不知道这是否是提及这一点的合适地方,但我觉得它可能是相关的。

出于某种原因,cmd 和 powershell 目前似乎具有巨大的字体大小和窗口大小,具体取决于它们的启动方式和启动位置。 从开始菜单,通过资源管理器,通过 Win + R 等。

当新终端成为默认终端时,它将:

  1. 有一致的字体大小和窗口大小?
  2. 也可以是“在此处打开 Poweshell 窗口”等的默认终端吗?

这里有一些例子来说明我的意思。

按顺序,从任务栏快捷方式启动,从“在此处打开 Powershell 窗口”启动,从在文件资源管理器地址输入中键入“powershell”启动(注意默认提示似乎也有所不同)。

image

如果终端统一所有这些,那就太好了。 这很令人沮丧。

@lloydjatkinson谢谢! 它在这里只是稍微合适,但足以说明:

  • 控制台有三个(!)(半个)不同的地方,它从中读取设置
  • 终端只有一个(半个)

要回答您的具体编号点:

  1. 是的,完全是,因为设置的真实来源只有一个。
  2. 是的,这就是该功能正在跟踪的内容。 每次启动控制台窗口以进行交互使用时重定向到终端。

默认提示看起来就像它表示您在不同的目录中。 从资源管理器的地址栏中开始powershell会在您当前正在查看的任何目录中执行此操作。

亲爱的团队,这仍然在积压中吗? 现在随着 Powershell7 的发布,它提出了更容易访问能够处理正确 Powershell 的现代终端的需求。

1421 目前只打开 PS5.1 并且没有官方选项可以改变这个

我已经在 Twitter 上与 Steve Lee 进行了交谈,当然,在最近的版本/内部版本的 Windows 10 客户端上推广终端和 Powershell 产品的使用将是有益的。

@Karl-WE 在开始查看 Windows 所需的更改以支持备用控制台主机(或将使用它们的终端)的注册、枚举和执行之前,我们将推出 v1

由于这可能需要一些 API 支持,因此它可能只能作为大型 Windows 版本的一部分来完成。

感谢达斯汀在这里所做的出色工作。 我希望这种团队间的努力可以与 Insider 和 Powershell 团队沟通,祝 1.0 发布时间表好运。 也许我们可以在 20H2 实现这一目标,这让每个人至少参与 9 个月。

我希望这会尽快添加,是否有任何有效的非官方解决方法?

请放心,如果有的话,这个问题会有数百条社区评论构成各种疯狂的解决方法;)

我对一些基本的 bat 文件有一个想法:
在后台运行你的 bat 文件,然后关闭默认的 cmd 窗口

START /B  wt cmd /c yourfile.bat
exit

请放心,如果有的话,这个问题会有数百条社区评论构成各种疯狂的解决方法;)

几十年来,我一直从 Win+R 开始cmd (现在是powershell ),但我正在痛苦地重新训练自己输入wt 。 我猜你可以教老狗新把戏。 慢慢地。 😁

这要归功于 %userprofile%\AppDataLocalMicrosoftWindowsApps 中的应用程序执行别名 wt.exe

嗨团队,用户,因为 wt 现在有非常好的一组选项和预设设置 json 和一个用户可定义的部分,其中还包括设置,哪个控制台是启动 wt 时要打开的默认控制台 - 我认为这足以拿起所有粗略的计划(https://github.com/microsoft/terminal/issues/492#issuecomment-490092382)至少进行以下尝试:

Win+X 的整合。

我如何_认为_你可以做到这一点:

  • 与詹妮弗先生和团队联系以进行设置
  • 添加能够替换或更新以下设置的新设置项以启动 wt 而不是 powershell 或 cmd
  • 相应地更新 ADMX 文件,以便它也可以通过 GPO 进行设置
  • 警告:wt 需要由用户安装

  • 用户可以使用默认控制台选项来指定默认从那里打开哪个

喜欢
"profiles": [ "defaultProfile": "{574e775e-4f2a-5b96-ac1e-a2962a402336}" { "guid": "{574e775e-4f2a-5b96-ac1e-a2962a402336}", "hidden": false, "name": "PowerShell 7", "source": "Windows.Terminal.PowershellCore", "useAcrylic": true }, ],

设置 > 个性化 > 任务栏

“用powershell替换Win+X cmd”

replace-command-prompt

也许这是用户的天真观点,但我无法想象多年来可以将cmd切换到Powershell,但并没有向前迈出一小步,再次用wt替换这两个项目。 是的,以这种方式拥有和不拥有管理员权限的 wt 是有意义的,默认情况下,它也像其他所有控制台一样不提升(除了少数例外)

show-windows-powershell

你能详细说明为什么要做这么多工作吗? 这将是一个开始。

在“设置”>“应用程序和功能”>“默认应用程序”中选择默认终端应用程序 - 我可以理解这需要更多的幕后工作。 我用 NirSoft ShellExView 仔细检查过,目前这不是那么容易实现的。

但是,更改上面提到的 Win+X 设置已经存在。
请注意,甚至还有一个 3rd 方工具可以将 Win+X 菜单更改为任何喜欢的人,但我现在宁愿将下载源评为不受信任。

您可以在此处找到该工具,但使用风险自负
Win+X 菜单编辑器
由 Sergey “Happy Bulldozer” Tkachenko 创建
http://winaero.com
本软件使用hashlnk工具源码
hashlnk 由 Rafael Rivera 创建
http://www.withinwindows.com/

希望我被允许发布此参考,否则请删除它。 如果我可以将应用程序作为 zip 或 Onedrive 上传,请告诉我。 没有暗示不允许在其他地方镜像它。

ps 我已经尝试将 wt 添加到 Win+X 菜单中的新组中,但由于某些不清楚的原因它未能这样做。 权限似乎是正确的。 我可以添加任何文件作为链接,除了来自
%localappdata%MicrosoftWindowsApps(即使有完整路径)。

wt

我很好奇是什么通过设计阻止了这种情况。 似乎是因为应用程序有 0 kb 大小的文件和某种符号链接? 在任务管理器中,您也无法“打开 wt 进程的位置”。 我怀疑这是 MS 应用程序虚拟化的本质。 也适用于其他如 Edge Chromium、notepadS 等。

鉴于这些信息和情况,我现在可能明白为什么要完成这种改变如此困难。 您无法从资源管理器访问它,但可以从 Win+R / 搜索启动它。 多么奇怪。

您不能直接添加 wt.exe,因为它不是“真实文件”,但是如果您创建 wt.exe 的快捷方式,该工具将能够添加它并且它会正常工作。

您可以在这里阅读更多相关信息: https ://www.hanselman.com/blog/TotallyUnsupportedHacksAddWindowsTerminalToTheWinXShortcutMenu.aspx

如果我正确理解 WinX 的功能,Windows 不会仅按路径进行链接,可能是为了防止欺骗,但也会生成文件的哈希值。 由于所有“应用程序”的文件大小为零,因此“无法打开”可能是由于无法生成哈希,可能不是因为无法访问/读取它。

感谢 thlac @shanselman的参考,这让我们更难理解为什么没有官方方式。 Ofc 有一个文件的快捷方式暴露了篡改它的风险,这似乎与 WinX 不易被篡改的原始设计理念相矛盾。
风险在于 PUA / 恶意软件可能会更改此菜单中的目标。

@Karl-WE 只是想确保每个人都在同一页面上。 Windows Terminal 是一个终端/控制台应用程序,而不是一个shell 。 Cmd 和 PowerShell 是shell 。 (另见: https ://www.hanselman.com/blog/WhatsTheDifferenceBetweenAConsoleATerminalAndAShell.aspx)

所以 Win+X 设置与这个问题无关(恕我直言)(因为它只确定外壳,而不是终端应用程序)。

我理解你的定义。 最后,鉴于许多相同的请求,WinX 确实有助于使 Windows Terminal

  • 更加突出,这只能帮助其成功和传播,并最终兑现所花费的工作。

  • 帮助用户使他们最喜欢的默认 shell更易于访问。
    目前可能不是 cmd 或 PoSh 5.1 可配置的。

从这个角度来看,我仍然同意您指出的差异,但最终目标是帮助使 shell 更易于访问,同时与默认 console相比具有终端的更好功能。

@nu8你可能会同意“用这个存储库构建的 conhost 版本替换你的系统 conhost”和“让 Windows 自动启动终端实例”是完全不同的事情;)

此存储库同时托管控制台主机和终端。 一个建立在另一个之上,但它们肯定不一样。

@nu8考虑到@DHowett必须审查和分类的大量事情,有时可能存在差异。 正如你所引用的,很明显时间轴上的 492 出现在 1817 年之前,事情可能会发生变化。
如果他以其他方式发布它会更烦人。 但无论如何:

好消息是:它按计划进行,不再积压

1 | 默认终端 | 如果生成了命令行应用程序,它应该在 Windows 终端(如果已安装)或您的首选终端中打开
问题:#492
规格:#2080

来源: https ://github.com/microsoft/terminal/blob/master/doc/terminal-v2-roadmap.md

@DHowett感谢您在这里的工作,我有一个小问题:
你认为我们可以期待它在 20h2 或 21h1 Windows 更新中推出吗? 您是否知道朝这个方向进行的任何内部工作(在操作系统级别)?
我知道计划可能会改变,但我仍然很好奇 :)

我们是必须进行操作系统级别的工作才能启用此功能的团队,所以如果我们_不_知道启用此功能正在做的工作,我会感到非常惊讶。

我们仍然刚刚超过终端的 1.0 版本,所以我们还没有真正开始这方面的工作。 我想说它不太可能在 20H2 或 21H1 登陆,考虑到我们现在可能必须完成该功能(或至少原型化)才能将其纳入其中任何一个版本。

我想知道什么会先出现 - WSL2 中的 defterm 设置或完整的 gpu 加速支持,此时我们可以只使用本机 linux 终端,至少对于可以虚拟化的开发

因为这个问题有很多订阅者,所以我要锁定它。
如果您有贡献会影响此功能的工程方向,请通过我的 GitHub 个人资料上的地址给我发送电子邮件。

此页面是否有帮助?
0 / 5 - 0 等级