Terminal: 功能要求:热键下拉ala quake / guake / tilda

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

当我进入Windows时,我最想念的琐事是为三个显示器中的每一个都有一个单独的热键终端。 我最相信上帝的时候是当我意识到这是可以实现的,并且如果您可以在Windows中实现这一点,我可能不得不亲您。

Area-User Interface Help Wanted Issue-Feature Product-Terminal

最有用的评论

我必须从ConEmu切换到Quake模式。 但是,我更希望它始终打开同一实例,而不管当前关注的是哪个监视器/虚拟桌面。

我个人使用win + tilde打开ConEmu,但是显然快捷方式应该是可配置的。

所有106条评论

因此,您的意思是,如果您有三台显示器(例如),则可以按不同的热键,使终端从您选择的任何显示器上滑下地震台样式?

因此,您的意思是,如果您有三台显示器(例如),则可以按不同的热键,使终端从您选择的任何显示器上滑下地震台样式?

完全正确我知道这对于频繁使用的主流终端来说似乎有些古怪/不必要/花哨,但我向您保证,生产力才是真正使热键下拉列表大放异彩的地方。

理想情况下,每个监视器都具有自己的终端,可以与其他显示器同时保持打开状态。
在使用3个Tilda实例的nix中,我对其进行了设置,以便f1下降,关闭或选择是否打开但未激活左侧监视器。 F2做我的中心屏幕,f3做我的右边。 如果它们也已经打开,我可以使用这些热键在这三个终端之间跳转。 最终结果使在终端和其他后台应用程序之间移动成为工作流的梦想。 如果我自己这么说的话,这看起来也很酷。

Guake我喜欢的另一种选择是一次只限于一个窗口/实例,并且在按下热键时,它仅会落在鼠标当前所在的任何监视器上。 这也是一个非常简洁的功能,但是不是我想要的。 我不反对行为选择,但是代码行不会在树上生长,因此选择我更喜欢tilda设计。

终端方面,我们的确错失了终端智慧,这正是Microsoft致力于构建令人兴奋的新的更高级的功能丰富的终端的原因。 感觉上像是微软在为开发人员和未来的开发人员(这里的学生)花在他们的操作系统上的时间而战,如果将WSL2与下拉终端配对,我知道我花的时间要少得多在Mint和10之间往返。

我必须从ConEmu切换到Quake模式。 但是,我更希望它始终打开同一实例,而不管当前关注的是哪个监视器/虚拟桌面。

我个人使用win + tilde打开ConEmu,但是显然快捷方式应该是可配置的。

是的,有一个实例在下拉,它应该放在我们的鼠标光标所在的监视器上,并且应该聚焦,但是在执行Alt + Tab时它不会出现,所以感觉好像已经融入了OS。 像瓜克一样。

@cyberhck您确定它应该在鼠标所在的位置,而不应该在当前聚焦的窗口所在的位置吗?

@杰库
Guake的默认行为是,如Cyber​​hck所描述的那样,热键会激活监视鼠标当前所在的终端。 如果需要,它还可以选择为其分配特定的监视器。 它的限制仅在于一次只能运行一个实例,而Windows Terminal则没有问题。 如果可以使用静态或跟随行为之间的选择来设置Windows终端的方式,则它所需要的只是每个实例的独立设置,以匹配guake(跟随或静态)和tilda(多个实例)的功能。

是的,我们可以采用三种方式配置,一种配置在一个特定的监视器上,一种配置在任何聚焦的窗口上,另一种配置在有鼠标的位置(如果在应用程序列表(alt + tab)中隐藏一个选项,这也很重要)启用了此模式,因为我想用户在IDE和浏览器之间切换时不会希望看到它)

:)

@Jakul ,我之所以说有鼠标,是因为当您浏览某些内容时,鼠标总是很可能位于您的眼前,如果您使用快捷键,则切换眼睛非常容易,而不是完全移动鼠标。

+1

在未提供有用的其他反馈的情况下,请勿以“ +1”回复主题。 Github的+1非常好,不会在这里对线程收件箱中的每个人执行ping操作:
image

因此,您的意思是,如果您有三台显示器(例如),则可以按不同的热键,使终端从您选择的任何显示器上滑下地震台样式?

Guake的多监视器上的默认行为是将鼠标放在终端放下的位置。

但是,如果您不希望这种行为,可以通过设置将其设置为下拉至所需的任何监视器。

我需要做的是能够禁用动画并完全隐藏窗口(从任务栏,alt + tab,win + tab等)。

我也希望使用从不显示任务栏按钮的其他选项,但可能超出此问题的范围

我喜欢这个建议,而且这是唯一每天避免使用(一旦发布)的建议。 我喜欢在ConEmu中使用ctrl +`,因此甚至不使用VSCode集成终端。 但是,我不确定我是否会在乎每个监视器的主键绑定。

另外,如果没有其他实例,例如使用应用程序快捷方式的xfce terminal dropdown ,该建议是否包括启动终端实例的启动? 我不介意它是否是Win +`作为系统快捷方式,类似于Win + \

这可以通过绑定了全局热键的快捷方式来实现,并且如果某些实例已经在运行,则可以使用CLI通过快捷方式调用toggle。 使它成为系统范围的热键似乎不是一个好主意imo

如果我的终端可能像guake一样掉落,我会考虑在Windows上进行更多的开发(目前在Linux上完成了95%)。

我也主要在Windows上使用cmder / conemu,这也是我还没有切换的主要原因,尤其是因为我使用的是两台显示器和(通常)是3个台式机,而没有全局方式来关闭终端我本质上有6个实际窗口可以放置的地方,听起来很傻,但这很烦人。

此外,许多人都提到使用键盘快捷键来实现此目的,但大家都应该考虑将其映射到专用的鼠标按钮上,如果可能的话,还可以将其映射到手势上。 晚点再谢我。

很高兴看到其他人对可配置下拉终端的想法感到兴奋。 显然,人们对这些下拉菜单在默认情况下的行为有着截然不同的偏好,但是只要大多数人的偏好只要能够

  1. 可以为每个实例配置鼠标跟踪或绑定到一个监视器。
  2. 每个实例可以有自己的热键。

然后,在可配置的可能性范围内您喜欢它的内容并不重要。

我个人使用了地震和tilda的组合,因此我在每个屏幕上都绑定了一个终端,在鼠标之后绑定了一个终端。

@NOFUNEVER您拥有人们所要求的大部分权利,但是@cyberhck@zakius指出了其他一些可能很重要的功能:

  • 除了监视绑定/鼠标外,还将窗口焦点添加到配置选项列表中。
  • 应该具有可配置选项,使其不显示在alt-tab /任务栏上吗?

听起来好像还在讨论是否应该有多个实例,例如tilda(我从未使用过,也无法发表评论),或单个实例,例如Guake。 我还有什么想念的吗? 如果没有,我们应该解决该问题,并着手编写规范。

@zakius ,您还提到了禁用下拉动画的愿望。原因吗?我认为这没什么问题,但是有理由会有所帮助。)

我总体上不喜欢动画,因为它们吸引了我的注意力(如果某些事物使您本能地看着它,那在过去可以挽救您的生命)。 但是也有我所说的blocking animations ,您必须等一下才能采取行动,从而阻止您阅读文本或发出输入命令。 由于您别无选择,这些对工作流程造成了更大的困扰,其中有些是为了标记执行缓慢而设计的,但是在快速的计算机上,它们会使您的工作速度减慢。

最好的方法是能够选择动画时间为0并将其完全禁用

我们不希望像Mac这样的动画太慢,但我想guake会在不到100毫秒的时间内完成动画,所以它很敏捷,也许延迟也可以是配置,没有动画为0。 Guake动画看起来“恰到好处”,它的速度非常快,但是您可以看到它的来历或去向。

添加配置非常棒,因为不喜欢动画的人可以禁用它,或者将其变成慢速动画(如mac),我只需要执行80ms或120ms。

我希望ConEmu对我来说是一个解决方案,它不适用于所有人,它建立在Hotkey之上,而在Hotkey之上的任何内容都被检测为特洛伊木马(虚假警报)。

许多人正在使用终端进行工作,但是他们的工作不允许他们安装被检测为木马的东西。 (与Qonsole相同) https://github.com/joedf/Qonsole/issues/9

实施此操作时要考虑的另一重要事项是,下拉列表应出现在当前活动的虚拟桌面上。 我大量使用虚拟桌面。 刚开始使用ConEmu时,我发现下拉菜单始终将我带回到桌面1,然后显示该下拉菜单。 我最终找到了使它在ConEmu中按预期工作的设置,并且Windows Terminal的行为必须相同。

是的,实际上这应该是显而易见的:D想象当您在其他工作区上时,按下热键,并且在第一个出现的终端。

因此,在我们的霸主将其添加到终端之前,我炮制了一个简单的C#代码,同时为我解决了这一问题: https :

它使用CTRL +〜和CTRL + Q进行Quake样式的下拉,这当然是完全可以更改的。 目前不会全屏显示,并会落在鼠标所在的屏幕+工作区中。

如果有人被吸引,我欢迎提出建议和/或公关。

@flyingpie那是您编写的非常整齐的代码。 看起来大多数程序也可以在c ++中运行,所以很高兴知道这一点。

我只想重申一下,尽管团队中没有人会为1.0做到这一点,但我们很高兴地回顾了社区的贡献。 理想情况下,社区中的某个人将能够将该线程中的建议和评论汇总到规范模板中,并提交该规范的PR。 该规范获得批准后,我们​​将很高兴地审查PR,并更改所需的代码。 在我看来, @ flyingpie确实使90%的基础知识下降了,它主要是在磨光边缘盒。

我有一个类似的用例。 我不使用Quake风格,但我确实很喜欢常开的终端。

我的ConEmu安装程序执行了以下操作,到目前为止wt.exe似乎仍然缺少(按重要性的高低顺序):

  1. 我的ConEmu实际上不会退出,除非在关机时或明确询问时。 如果我关闭了最后一个标签,则它仍然没有标签就打开。
  2. 每次都会启动到相同的位置。 (0,0)在我的第二个监视器上。
  3. 我有一个全局热键来切换它的焦点(ctrl +`)。
  4. 它不会显示在任务栏上。 它有一个托盘图标。
  5. 您只能启动一个实例。
  6. Windows登录后它将自动启动。 (以下重要)
  7. 它是默认终端,会自动使用其他终端(例如,如果我“运行” wt.exe,然后运行cmd.exe,我希望wt.exe会使用新的cmd.exe选项卡打开一个新选项卡) *

对于我从ConEmu切换到wt.exe来说,所有这些都是大致阻止程序。

另外:

  • 有些人会希望始终位于最前面。
  • 有些人希望将丢失的焦点最小化,而有些人通常希望禁用最小化/最大化动画。
  • 有些人希望终端机在聚焦时跳到其“活动”监视器。
  • 有些人想要多个终端实例? *

这些都是不同的功能,应具有自己的IMO规范。 我愿意推动某些规范过程。 @ zadjii-msft您是否知道其中任何项目要点已经具备规格,由于某些原因而无法实现等?

*整rick?

因此,您列出了一些单独的问题,请看我是否可以将它们全部链接起来:

  1. #2080是此功能的WIP规范,到完成时它将变成一个庞大的规范。
  2. #1043可能不需要TBH规范,只需要有人来做即可
  3. 第653章(这个问题)
  4. 坦白地说,我之前从未听说过在任务栏中没有该请求的请求。 因此,这绝对没有它自己的问题。 似乎没有托盘图标就需要一个托盘图标,因此这些可能只是一个规格/任务
  5. 这属于#2080
  6. #2189
  7. #492正在跟踪此事件,但是可能需要对某些操作系统进行更改。 这在#2080中也经常出现。
  8. 我本来可以发誓,这是它自己的问题,但看起来并非如此。
  9. 之前从未听过此请求,但听起来很整洁
  10. 似乎与此功能TBH相似。 也许我们应该在本规范中同时考虑这两种情况?
  11. 不知道这是什么意思-是指#1000等窗格吗?

其中#1043,#653,#2189均标记为“需要帮助”😉

我之前提到过4.,并确保在隐藏窗口时确保终端不会出现在Alt + Tab或Win + Tab上

多个实例意味着多个窗口,这些窗口可能(但不必)分布在我假设的多个屏幕或虚拟桌面上,但是这会使处理全局热键更加复杂甚至是不可能的(我认为conumu在启用地震模式时会禁用多实例)

对于11 /“多个实例意味着多个窗口”,我专门指的是此处描述的OP: https

我对此并不特别在意,但这是一个单独的相关问题。 我想他们希望多个全局热键以与我希望列表中项目3的一个热键相同的方式打开/激活/聚焦多个实例。

@zakius

我之前提到过4.,并确保在隐藏窗口时确保终端不会出现在Alt + Tab或Win + Tab上

多个实例意味着多个窗口,这些窗口可能(但不必)分布在我假设的多个屏幕或虚拟桌面上,但是这会使处理全局热键更加复杂甚至是不可能的(我认为conumu在启用地震模式时会禁用多实例)

使用地震下拉菜单时,ConEmu会发生多个禁用的实例。
如果您想要类似带有地震下拉列表的多个实例之类的东西,以逻辑方式处理这种行为几乎是不可能的,那么必须使用选项卡或使用终端多路复用器。

编辑:
您可以在打开的第一个终端窗口是主窗口的情况下工作,而这是使用Quake热键时总是被调低的窗口。

将其与选项卡支持一起使用可能会很棘手-也许这就是为什么我所知道的其他终端都无法支持这种行为。 在这种情况下,还需要考虑一些极端的情况,例如,如果关闭主主窗口而又有一个辅助窗口仍然打开,会发生什么情况?热键是否会继续忽略该辅助终端窗口,等等。

对于ConEmu,当启用Quake并尝试再次打开ConEmu(从桌面快捷方式说)时,它将不会打开新窗口,而是仅将焦点移到现有的运行终端上。

您可以在打开的第一个终端窗口是主窗口的情况下工作,而这是使用Quake热键时总是被调低的窗口。

还可能允许在每个虚拟桌面的每个物理屏幕上运行单个实例,这样主快捷键将始终在当前活动的VD和屏幕上显示该实例,但这非常复杂,我认为禁用多个实例是合理的

我认为,如果对选项卡进行不断改进,并且可以从任何地方调用地震样式的窗口,则可以忽略多个实例。 至少现在。

还可能允许在每个虚拟桌面的每个物理屏幕上运行单个实例,这样主快捷键将始终在当前活动的VD和屏幕上显示该实例,但这非常复杂,我认为禁用多个实例是合理的

我不会完全忽略多个实例-有时在一个屏幕上打开一个终端可以非常方便,该终端可以在流媒体日志或显示系统负载的同时在另一个屏幕上的另一个终端中工作。

我过去几年一直在使用Ubuntu桌面(自WSL v2起才重新使用Windows),并且由于Guake和Ubuntu终端在响应度,UI设计/主题等方面非常相似,因此我经常打开默认的Ubuntu终端在我的垂直屏幕上,查看日志和系统负载。

如果禁用了带下拉菜单的多个实例,显然这是解决问题的简便方法-使用其他终端。
问题是Windows上的大多数终端都是完全垃圾(因此该项目是c)。

当我建议时,多余的实例要考虑多台显示器
它。 每个监视器一个,每个监视器都有自己的热键。 我用人像风景
在家里设置的肖像以及在运行薄荷时让guake在
中心,但它不提供tilda拥有的额外实例,因此我将其用于
外部人像监视器。

在2019年9月16日星期一下午2:00 nofunatall [email protected]写道:

还有可能允许每个实例运行一个实例
每个虚拟桌面的物理屏幕,这样主热键将始终
在当前活动的VD和屏幕上显示该实例,但这就是
非常复杂,我认为禁用多个实例是合理的

我不会完全忽略多个实例-有时非常方便
在一个流日志或显示系统的屏幕上打开终端
在相邻屏幕上的另一个终端中工作时加载。

我过去几年一直在使用Ubuntu桌面(只是
从WSL v2开始返回Windows,并且从Guake和Ubuntu终端返回
在响应能力,UI设计/主题等方面,我经常很相似
在垂直屏幕上打开了默认的Ubuntu终端以查看日志
和系统负载。

如果具有多个实例,这显然是解决问题的简便方法
下拉菜单被禁用-使用其他终端。
问题是Windows上的大多数终端都是完全垃圾(因此
项目ofc)。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/microsoft/terminal/issues/653?email_source=notifications&email_token=ACAH5BIA5ZPETCBZK77LMVLQJ7XYVA5CNFSM4HL735C2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOCOM
或使线程静音
https://github.com/notifications/unsubscribe-auth/ACAH5BM722EZEB5LQBXGW6TQJ7XYVANCNFSM4HL735CQ

伙计们,我们这里显然有两个独立的问题。 我们可以将其编辑为仅与“ Quake样式”(全局/单个终端)热键有关吗?

然后是第二个问题,此问题将阻止该问题,以便为其他显示器分配专用的“ Quake样式”热键。

第一个似乎更受欢迎和期望。 我很乐意看到第二个太(很酷的想法@NOFUNEVER从来没有想过这样的功能,似乎是有用的),但是这将是很好,如果我们能清除这个话题一点。

尽管有此问题的名称,OP的问题实际上是第二个问题。 无论如何,我认为#2080在很大程度上阻止了打开单个终端的热键。 在强制实施单个终端之前,我们实际上无法通过热键打开单个终端。

https://github.com/microsoft/terminal/issues/653#issuecomment -520419611

我认为这是最好的分类。

@rlabrecque是的,我知道最初的问题与更高级的解决方案有关,但是从评论

这就是为什么我建议将此问题转换为与地震样式相关的问题,并将后续功能请求提取到一个单独的问题中,以便我们也可以对其进行跟踪。

在我看来,对于每种功能,都需要将其分解为多个问题,从基本的“热键切换可见性”功能开始。 不需要其他任何功能就可以做到,对吗?

由于存在多个问题,因此可以更轻松地了解配方中每个特定变化的需求并确定开发的优先级。 似乎最低限度可行的功能似乎会刮擦很多人的瘙痒。

那不是https://github.com/microsoft/terminal/issues/653#issuecomment -520419611描述的评论吗?

对于等待此操作的用户(例如我本人)等,您可以使用自动快捷键和固定的任务栏项作为解决方法。

自动热键脚本:

^`::Send #5

这会将ctrl +`映射到winkey + 5,将其更改为您的需求。

flypie提供的工具要好得多:不需要固定并完全隐藏任务栏按钮,所以我正在将其与其他应用程序一起使用(因为Terminal也缺少其他东西)

使AutoHotKey解决方案更进一步:

#SC29::ToggleTerminal()

ShowAndPositionTerminal()
{
    WinShow ahk_class CASCADIA_HOSTING_WINDOW_CLASS
    WinActivate ahk_class CASCADIA_HOSTING_WINDOW_CLASS

    WinMove, ahk_class CASCADIA_HOSTING_WINDOW_CLASS,, -5, -10, A_ScreenWidth + 10, A_ScreenHeight * 0.7,
}

ToggleTerminal()
{
    WinMatcher := "ahk_class CASCADIA_HOSTING_WINDOW_CLASS"

    DetectHiddenWindows, On

    if WinExist(WinMatcher)
    ; Window Exists
    {
        DetectHiddenWindows, Off

        ; Check if its hidden
        if !WinExist(WinMatcher) || !WinActive(WinMatcher)
        {
            ShowAndPositionTerminal()
        }
        else if WinExist(WinMatcher)
        {
            ; Script sees it without detecting hidden windows, so..
            WinHide ahk_class CASCADIA_HOSTING_WINDOW_CLASS
            Send !{Esc}
        }
    }
    else
    {
        Run "c:\Users\kim\AppData\Local\Microsoft\WindowsApps\wt.exe"
        Sleep, 1000
        ShowAndPositionTerminal()
    }
}

该脚本将win +½(在丹麦语键盘上,转义下方的左上方按钮)绑定到使正在运行的终端实例成为焦点的函数,或者在非实例正在运行时启动新实例,并“正确”调整其大小和位置。 如果终端已经处于焦点位置,它将隐藏该窗口(因此不会在alt + tab中显示)。

我对@kimbirkelund解决方案进行了一些更新,以解决窗口大小错误,以防万一您没有像我一样将任务栏停在底部。

您可以在这里找到代码,也可以直接从下面复制:

; How much height of screen size the terminal window takes.
VRatio := 0.8
; The path to the Windows Terminal exe file.
WtPath = "%LOCALAPPDATA%\Microsoft\WindowsApps\wt.exe"

#SC29::ToggleTerminal()

ShowAndPositionTerminal()
{
    ScreenX := GetScreenLeft()
    ScreenY := GetScreenTop()
    ScreenWidth := GetScreenWidth()
    ScreenHeight := GetScreenHeight()
    global VRatio

    WinShow ahk_class CASCADIA_HOSTING_WINDOW_CLASS
    WinActivate ahk_class CASCADIA_HOSTING_WINDOW_CLASS

    WinMove, ahk_class CASCADIA_HOSTING_WINDOW_CLASS,, ScreenX-5, ScreenY-10, ScreenWidth+10, ScreenHeight * VRatio,
}

ToggleTerminal()
{
    WinMatcher := "ahk_class CASCADIA_HOSTING_WINDOW_CLASS"

    DetectHiddenWindows, On

    if WinExist(WinMatcher)
    ; Window Exists
    {
        DetectHiddenWindows, Off

        ; Check if its hidden
        if !WinExist(WinMatcher) || !WinActive(WinMatcher)
        {
            ShowAndPositionTerminal()
        }
        else if WinExist(WinMatcher)
        {
            ; Script sees it without detecting hidden windows, so..
            WinHide ahk_class CASCADIA_HOSTING_WINDOW_CLASS
            Send !{Esc}
        }
    }
    else
    {
        global WtPath
        Run %WtPath%
        Sleep, 1000
        ShowAndPositionTerminal()
    }
}

; Gets the edge that the taskbar is docked to.  Returns:
;   "top"
;   "right"
;   "bottom"
;   "left"
GetTaskbarEdge() {
  WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,

  if (TW = A_ScreenWidth) { ; Vertical Taskbar
    if (TY = 0) {
      return "top"
    } else {
      return "bottom"
    }
  } else { ; Horizontal Taskbar
    if (TX = 0) {
      return "left"
    } else {
      return "right"
    }
  }
}

GetScreenTop() {
  WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
  TaskbarEdge := GetTaskbarEdge()

  if (TaskbarEdge = "top") {
    return TH
  } else {
    return 0
  }
}

GetScreenLeft() {
  WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
  TaskbarEdge := GetTaskbarEdge()

  if (TaskbarEdge = "left") {
    return TW
  } else {
    return 0
  }
}

GetScreenWidth() {
  WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
  TaskbarEdge := GetTaskbarEdge()

  if (TaskbarEdge = "top" or TaskbarEdge = "bottom") {
    return A_ScreenWidth
  } else {
    return A_ScreenWidth - TW
  }
}

GetScreenHeight() {
  WinGetPos,TX,TY,TW,TH,ahk_class Shell_TrayWnd,,,
  TaskbarEdge := GetTaskbarEdge()

  if (TaskbarEdge = "top" or TaskbarEdge = "bottom") {
    return A_ScreenHeight - TH
  } else {
    return A_ScreenHeight
  }
}

我不想继续取消此功能请求,但我想分享我对@wizcas@kimbirkelund已经完成的工作所做的更改。 以前从未真正使用过AHK,所以它有点黑,但是总之,我添加了菜单和设置文件,因此您可以更改以下内容:

  • 终端高度
  • 终末不透明
  • 终端字体类型和大小
  • 配色方案

所有这些都无需重新编译文件或打开JSON文件并手动编辑。 它将非profile.json设置(例如终端大小)保存在同一目录中的自己的settings.ini文件中。 如果有人想贡献,很高兴接受对它的更改。 我有时也会在此处添加主题创建者,因为这与我当前正在使用的Monokai主题相比有点麻烦(如果有人想将其保留下来,则在我的主旨中)。 以下是“设置”菜单的小预览:

image

编辑:更新的屏幕截图

您可以在此处获取代码: https :

提到的链接重复问题之一包括tmux控制模式支持,目前仅Mac OS上的iTerm支持。 它是一项功能非常强大的功能,但是据我所知,在其他终端中实施该功能的所有尝试均因无人维护的叉子而无声地死亡。 在Mac OS之外安装它会很棒。

由于这个功能,我继续进行了一个项目。 https://github.com/dotjosh/WinTermPlus

@dotjosh看起来很棒! 您是否有理由将其实现为独立工具而不是PR? 合并将花费多少精力?

@dotjosh看起来很棒! 您是否有理由将其实现为独立工具而不是PR? 合并将花费多少精力?

我在C#/ WPF中很强大,并且能够很快完成它。 如果我们对这种行为感到满意,我愿意帮助移植它。

老实说,我认为这看起来很棒。 我一定很乐意审查该PR。

将任务栏任务栏位移植到我们拥有的更类似于UWP的模型上可能有点棘手(您可能需要混用package.appxmanifest),但本教程看起来不错。 将打开窗口的大小设置放在profiles.json以内,并在其中定义绑定也可能更有意义(即使在TerminalApp中实际上不做任何事情,因为我认为绑定需要在操作系统本身上注册,所以我确定有一种方法可以用C ++进行,尽管我不知道它是什么。

只是引用我之前说过的话:

我只想重申一下,尽管团队中没有人会为1.0做到这一点,但我们很高兴地回顾了社区的贡献。 理想情况下,社区中的某个人将能够将该线程中的建议和评论汇总到规范模板中,并提交该规范的PR。 该规范获得批准后,我们​​将很高兴地审查PR,并更改所需的代码。 在我看来, @ flyingpie @dotjosh确实使90%的基础知识下降了,它主要是在磨光边缘盒。

坦白说,我们并不需要在规范模板中填写_everything_,我只是想确保我们接受的任何贡献都在这里考虑了极端情况,并明确定义了这些情况的行为。 即:

  • 当用户尚未打开终端实例并按全局热键时会发生什么?
  • 当用户打开多个终端窗口时会发生什么? 哪一个打开? 在这种情况下不会发生什么吗?

    • 在打开多个终端窗口且当前聚焦一个终端的情况下,全局热键会隐藏活动窗口,还是召集最小化的窗口?

  • 用户可以选择使窗口最大化吗? 全屏?
  • 当用户尚未打开终端实例并按全局热键时会发生什么?

我认为这取决于终端实例的确切含义。 如果终端没有运行,则什么也不会发生。 我不认为应该有一项服务或与之挂钩的东西。 如果终端中没有剩余的外壳,则它应该仍在运行,等待新的外壳打开。 退出终端需要更加明确。

  • 当用户打开多个终端窗口时会发生什么? 哪一个打开? 在这种情况下什么都不会发生?
  • 在打开多个终端窗口且当前聚焦一个终端的情况下,全局热键会隐藏活动窗口,还是召集最小化的窗口?

我认为一般的假设是此模式将只允许一个终端实例。 第二次启动可执行文件只会使终端集中精力,可能在其中启动新的默认外壳程序? (非常类似于UWP应用程序的功能。打开“设置”,然后聚焦其他内容,然后再次打开“设置”,仅一个实例。)

  • 用户可以选择使窗口最大化吗? 全屏?

我不明白为什么不同时支持这两种方法。 in在这两种情况下,热键的功能与最小化/还原最小化大致相同。

我是否可以建议从其他受欢迎的终端的用户体验入手,如果它们不是最理想的,则从那里进行更改?

  • 当用户尚未打开终端实例并按全局热键时会发生什么?

没什么,因为终端没有运行。 此外,在这种情况下,应释放热键以供其他程序使用。 这就是ConEmu和Terminator的行为。

  • 当用户打开多个终端窗口时会发生什么? 哪一个打开? 在这种情况下什么都不会发生?

如果单实例设置处于活动状态:不会打开多个窗口。

如果单实例设置未处于活动状态,则Terminator将命令发送到所有实例,并且它们都切换状态。 这可能是最简单的解决方案。 在多个实例中使用地震模式并没有多大意义,这样终端就不会永久地处于隐藏状态(终结器将窗口从任务栏隐藏到隐藏状态)。

ConEmu:启用地震模式会强制执行单实例模式,并使复选框变灰。 这在行为方面更有意义,但会带来更多的复杂性。

我认为缺少单实例模式(#2227)不会妨碍实现此功能。

  • 在打开多个终端窗口且当前聚焦一个终端的情况下,全局热键会隐藏活动窗口,还是召集最小化的窗口?

见上文-两者。 它切换他们的状态。

  • 用户可以选择使窗口最大化吗? 全屏?

在ConEmu和Terminator中,这与地震模式无关,在切换为隐藏状态之前,该窗口将还原为它所处的状态。 如果是全屏,它将恢复为全屏;否则,将恢复为全屏。 最大化和非最大化窗口都相同。

只是有点挑剔:没有流行的终端使用实际(独家)全屏,但可以呈现无边框

我认为用例要好得多

从用户的角度来看,“全屏”和窗口最大化之间的主要区别似乎是“全屏”覆盖了任务栏。
--------原始消息--------发件人:zakius [email protected]日期:2019年11月15日22:38(GMT + 00:00)收件人:microsoft / terminal terminal @ noreply.github.com抄送:Igroeg Okiob [email protected] ,评论[email protected]标题:Re:[微软/终端]功能请求:热键下拉翼
地震/奎克/蒂尔达(#653)有点挑剔:流行的终端机都不使用实际的(独家)全屏屏幕,但可以呈现无边框
我认为用例要好得多

—收到您的评论是因为您发表了评论。直接回复此电子邮件,在GitHub上查看或取消订阅。
[
{
“ @context”:“ http://schema.org ”,
“ @type”:“ EmailMessage”,
“ potentialAction”:{
“ @type”:“ ViewAction”,
“ target”:“ https://github.com/microsoft/terminal/issues/653?email_source=notifications\u0026email_token = AB2TW7D3V347CBC62MCQ32TQT4QHVA5CNFSM4HL735C2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNWX4JGY554ZNWS4HJ4YGZ1WN4WJ4YZ1G0C0G5C0G0S0G4D0D0C
“ url”:“ https://github.com/microsoft/terminal/issues/653?email_source=notifications\u0026email_token = AB2TW7D3V347CBC62MCQ32TQT4QHVA5CNFSM4HL735C2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNWX4JGY4ZYCOM4HJ4YGZ1WNWX4JJ
“名称”:“查看问题”
},
“ description”:“在GitHub上查看此问题”,
“发布者”:{
“ @type”:“组织”,
“ name”:“ GitHub”,
“ url”:“ https://github.com
}
}
]

必须具有Quake控制台样式热键(ConEmu)。 有人能够将Terminal附加到ConEmu吗?

@dotjosh看起来很棒! 您是否有理由将其实现为独立工具而不是PR? 合并将花费多少精力?

我在C#/ WPF中很强大,并且能够很快完成它。 如果我们对这种行为感到满意,我愿意帮助移植它。

我们是! 我们可以提出要求吗?

我想说的是爱您使用新终端所做的一切。 而且我完全理解由于其他优先票证而无法获得功能请求。 每个团队都会发生这种情况,我的团队也不能幸免。

但是我不得不说,缺少此功能是PM的失败,还有点说明他们不完全了解此功能对这么多用户的影响。 这是什么,一个2指针? 也许3?

这是一种低挂水果功能,具有巨大的影响力。 我喜欢你们接受公共PR,但是如果公众不这样做,那就把它拉入冲刺。 这张票已经开放了一年。

对于某些人而言,这根本不重要,对于其他人而言,这是一个大问题,尽管由于此处发布了一些变通办法,我仍然可以没有它,所以我个人将那些无法以任何方式补充的事情列为优先事项,例如#574 (或者可能还有很多,这只是我的第二个破坏者)

对。 您在谈论我们如何未能适当地确定其优先级,我感谢此功能对您很重要。 但是,我想问一个问题:在核心团队的四位工程师的共同努力下,我们应该削减以下里程碑中的哪些功能(范围化查询,再加上宽松功能),以便为自定义窗口管理腾出空间?

  • _标记为已提交并关闭的功能_
  • 可及性
  • 标题栏中的标签
  • 窗格
  • 设置验证
  • 轮廓检测
  • 合理化的退出语义
  • CJK表意文字的正确渲染
  • 非US-ANSI键盘用户的输入支持
  • 调整大小不会删除您的历史记录
  • 搜索
  • (我可以在此处继续列出功能)

我每个月可以为每个开发人员提供一项功能,也许需要两项功能。 已经十个月了,在大多数时间里,我们的团队是2-3人,而不是4人。

如果您能确定我们确定的那些东西中的哪些是我们不应该带走的桌面赌注,那么我很高兴与您进行讨论。

我并不是说这些功能根本不重要。 我的意思是,这是一个悬空的果实,几乎有300个大拇指,为此创建了多个重复的票证,并且不像您列出的大多数其他功能/错误修复那样涉及。

我的意思不是贬低这里要做的工作,相反,我认为团队取得的成就是惊人的。 团队和您都值得赞扬。

也许我有点苛刻,所以我为此表示歉意。 但是我仍然认为我的观点正确。 当然,这取决于您和团队,仅由我决定。

如果这是一个低调的目标,那么我很乐意查看社区成员的PR,以解决此功能😉。 按照目前的情况,开发团队将在接下来的几个月内进行功能冻结和错误修复/更新。 我们肯定会在积压的任务中寻找一旦1.0着陆就可以开始的任务,我想明确地说,团队知道这是一个很普遍的问题。

将其固定到任务栏并使用Win + 1来访问它是一种解决方法(尽管我现在正在使用来自https://github.com/microsoft/terminal/issues/653#issuecomment-541408854的kimbirkelund autohotkey脚本)。 我认为这不是优先事项。

也许有人可以编译kimbirkelund或wizcas的脚本,并为不想安装autohotkey的用户提供二进制文件?

有比将其保留在任务栏上更好的解决方法,但我们要避免的是确切的事情,但是正如您所说,有一些事情虽然很重要,但是它在优先级列表上的位置要比那些不能使用外部工具补充的内容低

@kimbirkelund提供的AutoHotKey脚本的修改版本使我的讨论增加了两分钱:

  • 热键是Ctrl + ~
  • 终端设置在最前面
  • 我认为可能有用的一件事是:如果您打开了终端,并在显示终端时打开了一个窗口,如果您隐藏了终端,则它不知道该“新窗口”,然后返回到老活跃的。 我已经使用了几个小时,它似乎正在工作

更新:我更新了脚本,以便例如在切换到另一个窗口(alt + tab)时,在隐藏终端时它将切换到该窗口


这是脚本,希望它对其他人有用:

#Persistent
SetBatchLines, -1
Process, Priority,, High

Gui +LastFound
hWnd := WinExist()

; Subscribe to win-create events to get the activated window
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage(MsgNum, Func("OnWin"))
Return

OnWin(event, hwnd)
{
  ; WinGetClass, winClass, ahk_id %lParam%
  WinGetClass, winClass, ahk_id %hwnd%
  if (winClass = "CASCADIA_HOSTING_WINDOW_CLASS")
  {
    global activatedWindow
    activatedWindow = -1
  }
  else
  {
    ; 1 is HSHELL_WINDOOWCREATED
    ; 4 is HSHELL_WINDOWACTIVATED
    if (event == 1 || event & 4)
    {
      global activatedWindow
      activatedWindow = -1
      activatedWindow = %hwnd%
    }
  }
}

; Toggle windows terminal using Ctrl,`
^`::ToggleTerminal()

ShowAndPositionTerminal()
{
  WinShow ahk_class CASCADIA_HOSTING_WINDOW_CLASS
  WinActivate ahk_class CASCADIA_HOSTING_WINDOW_CLASS

  WinMove, ahk_class CASCADIA_HOSTING_WINDOW_CLASS,, -5, -10, A_ScreenWidth + 10, A_ScreenHeight * 0.7,
  Winset, AlwaysOnTop, On, A
}

ToggleTerminal()
{
  global activatedWindow
  WinMatcher := "ahk_class CASCADIA_HOSTING_WINDOW_CLASS"

  DetectHiddenWindows, On

  if WinExist(WinMatcher)
  {
    DetectHiddenWindows, Off

    if WinExist(WinMatcher)
    {
      ; Script sees it without detecting hidden windows, so..
      WinHide ahk_class CASCADIA_HOSTING_WINDOW_CLASS
      if activatedWindow > 0
      {
        WinActivate, ahk_id, %activatedWindow%
        activatedWindow = -1
      }
      else
      {
        Send !{Esc}
      }
    }
    ; Check if its hidden
    else if !WinExist(WinMatcher) || !WinActive(WinMatcher)
    {
      ShowAndPositionTerminal()
    }
  }
  else
  {
    Run "%SCOOP%\apps\windows-terminal\current\WindowsTerminal.exe"
    Sleep, 1000
    ShowAndPositionTerminal()
  }
}

@ zadjii-msft是否表示PR不会合并几个月?
这是我在安装终端时搜索的第一件事-也非常感谢您创建了一个真正的终端。 超级兴奋

@ chazt3n我们现在非常想清理1.0的一些bug积压。 在此之前,我们肯定要合并任何PR,直到我们发布1.0之后,但这绝对是我们在考虑将其引入2.0的想法。

我真的无法估计这些日期是什么时候,主要是“完成时”

抱歉,如果我没有详细阅读完整的主题,那么上面已经对此进行了介绍。 从行为的角度; 我认为最好让我们在“地震模式”或仅热键上的现有现有窗口/选项卡之间进行选择。

我当前使用的是另一个控制台平台,该控制台仅在设置中提供了一个复选框以“使用Ctrl +〜前景应用程序”,但是在其他方面它完全尊重我现有窗口的大小和状态。

这个功能非常非常非常好,因为我们经常拥有如此多的窗口,并且终端窗口(几乎总是不全屏显示)可能会在后台丢失。

最重要的是,我们不仅将窗口缩放到完整宽度,还保留其标题栏。 标题栏也必须不可见。

抱歉,如果我没有详细阅读完整的主题,那么上面已经对此进行了介绍。 从行为的角度; 我认为最好让我们在“地震模式”或仅热键上的现有现有窗口/选项卡之间进行选择。

它迷失在线程的隐藏项中,但是@flyingpie共享了一个C#程序来添加地震样式功能。 您可以在此处找到它,并且如果您在第51和72行上查看Toggler.cs ,您应该能够修改其行为,以便它仅将窗口置于前景而无需修改其大小。 我没有尝试过。

一段时间后,我切换到ahk方法,主要原因之一是我不必使用VS来构建它,但是经过一番摆弄之后,我得到了非常不错的结果,它的基础也在该线程中

请注意,我改将其用于Messenger,因为WT为我遗漏了更多东西

_一种替代解决方案,直到终端将具有本机下拉模式。 😃_

使用几周后,我可以推荐https://eugeny.github.io/terminus/

漂亮的终端机,也称为“地震模式”(将“设置”>“将终端机停靠”设置为Top ,将“热键”>“切换终端窗口”设置为Ctrl-` )。

它基于Electron构建,因此不是“轻量级”,但与WSL2配合使用时非常流畅。

我很喜欢将其设置到任务栏的第一部分,并使用WIN + 1将其打开。

我唯一的问题是,我无法始终在admin中打开它,这相当于WSL被束缚了。 因此,右键单击,右键单击,然后以admin-WIN + 1的身份打开。

@ chazt3n如果要使用键盘在admin中打开,它将为:
WIN + ALT + 1打开该任务栏项目的右键单击菜单。
菜单键(向右CTRL键旁边)或SHIFT + F10
用箭头键选择“以管理员身份打开”并输入。

@ chazt3n @SamHasler无需困难的方法。
如果在打开应用程序时按住Shift键,则会获得第二个副本。
如果在打开应用程序时按住Shift键Ctrl键
_这是正确的,无论是从开始菜单,运行对话框还是任务栏,以及您是使用键盘还是单击...来打开它。

换句话说,在按1之前,将键盘的整个角都捣碎,然后按1:Ctrl + Shift + Win + 1将打开一个新的提升副本。

相关: https :

@Jaykul当我向人们介绍魔术电梯修改器时,他们总是说“ whattttt”

我实际上正在从事这样的项目,并且很乐意与任何有帮助的人合作。 我应该在周末结束前发布一个Alpha版本,该版本支持带有下拉样式功能的CMD,powershell和WSL。

我对扩展guake / yakuake感兴趣,但是他们做了一些其他的想法,例如NOFUNEVER描述了一次可以使用多个显示器的想法,但是我不确定那会是什么样子。

尚未准备好进行测试,但是如果有人有兴趣进行协作,我应该在周末结束前准备好要进行测试的Alpha,请发邮件给我mwayne。 [email protected] 擅长于对应用程序进行主题设置并在C#中使用控件的人会提供很大的帮助。

https://github.com/usrcletus/winuake

请对我轻松一点,这是超级艰难的阶段。

希望能看到此功能。Windows终端的工作原理非常满意(它是为数不多的不会在“ cmatrix”速度测试中and死的Windows终端应用之一!)。 请在可能的情况下包括它(如果可以:)),一旦习惯了此功能,就不能没有它。

此功能非常节省时间。
真的很期待Windows Terminal 2.0

非常重要的功能,确实会使Linux和Windows之间的环境切换更好。

非常重要的功能,确实会使Linux和Windows之间的环境切换更好。

这将需要某些Linux终端仿真器具有所有功能,Windows已经具备了所有功能

团队发布了一个路线图,这个问题就在那里🥳尽管它的优先级3的范围是0到2😢

抱歉,我们的等级确实达到了3。 :微笑:

但是,似乎这个问题甚至可能在1年后才发布。 太糟糕了。 我非常热衷于使用新终端,但是没有热键功能,与linux上的guake相比,它太麻烦了。

很高兴它至少进入了榜单。 :)-WSL2 Docker使Windows成为了更实用的日常驱动程序,此功能将在其着陆时进一步推动它。

我同意这是一个方便的功能,如果使用Windows,我真的需要此功能。
但是,所有提到的功能应由窗口管理器而不是终端来处理。

从技术上讲,如果WM允许,那将是最佳选择,您将能够轻松处理所有窗口,但我们不太可能很快得到处理。 最好的选择是将其添加到PowerToys

没必要。 这只是意味着Microsoft员工不会对此进行处理。
任何人都可以将该功能作为PR提交。

如果有人想要一个非常简单的AutoHotkey解决方案,请参见要点: https :

这不是确切的解决方案,但可以轻松完成。

#NoEnv
#SingleInstance force
SendMode Input
DetectHiddenWindows, on
SetWinDelay, 0

#`::
    terminal := WinExist("ahk_exe WindowsTerminal.exe")
    if (terminal) 
    {
        active := WinActive("ahk_id " terminal)
        if (active)
            WinMinimize, ahk_id %active%
        else
            WinActivate, ahk_id %terminal%
    }
    else
        Run, wt.exe
Return

@ Defcon0我只是将其作为任务栏的第一个条目,并使用WIN + 1,这对我来说确实更方便,因为我可以将其放置在屏幕上的任何位置。

@Jaykul也为管理员提供了一个步骤

如果有人想要一个非常简单的AutoHotkey解决方案,请参见要点: https :

这不是确切的解决方案,但可以轻松完成。

#NoEnv
#SingleInstance force
SendMode Input
DetectHiddenWindows, on
SetWinDelay, 0

#`::
    terminal := WinExist("ahk_exe WindowsTerminal.exe")
    if (terminal) 
    {
        active := WinActive("ahk_id " terminal)
        if (active)
            WinMinimize, ahk_id %active%
        else
            WinActivate, ahk_id %terminal%
    }
    else
        Run, wt.exe
Return

我之前写过这样的要点: https :

在切换到WT之前,这一个将切换回您所在的活动窗口

global PreviousActiveWindow

#`::
DetectHiddenWindows, On
if (WinExist("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")) {
    if(WinActive("ahk_class CASCADIA_HOSTING_WINDOW_CLASS")) {
        WinActivate, ahk_id %PreviousActiveWindow%
    } else {
        WinGet, PreviousActiveWindow, , A ; 'A' for currently active window
        WinActivate, ahk_class CASCADIA_HOSTING_WINDOW_CLASS
    }
} else {
    TerminalLink = %localappdata%\Microsoft\WindowsApps\wt.exe
    if FileExist(TerminalLink) {
        WinGet, PreviousActiveWindow, , A ; 'A' for currently active window
        Run, %TerminalLink%
    } else {
        MsgBox, Windows Terminal not installed
    }
}
Return

我找到了一个用于向终端添加地震的简单应用程序的存储库:
https://github.com/flyingpie/windows-terminal-quake

对于我的用例来说效果很好。

我发现可以使用键盘管理器PowerToy和前面提到的Windows键+ NUM快捷方式启动固定在任务栏上的应用程序来轻松实现此目的。 只需将Windows Terminal固定到您的任务栏(我的设备在位置6),然后打开PowerToys Keyboard Manager工具。 我已经将WIN + `与Cmder一起使用,因此将快捷方式WIN + ` _remapped_到WIN + 6 。 现在,每当我执行WIN + ` ,Windows Terminal就会出现在前端或启动一个尚未运行的新实例(这比Cmder的本机还要好)。

image

不,不是同一回事
最小化!=隐藏窗口
隐藏窗口使其完全摆脱您的干扰

您是正确的,这肯定不是地震模式-抱歉给您带来混乱。 我发现此问题只是在寻找一种方法,以使用自定义的全局快捷方式将Terminal置于前台,这对我来说是个大问题,因为我习惯了Cmder的行为。 就我个人而言,我并不需要Quake模式,因此这种快捷解决方案填补了空白,因此我认为我会坚持下去。

这是最受好评的功能请求,已经开放了一年多?

怎么还没有实现呢?

嘿,我只是在这里发布一些研究笔记,因为我不想丢掉它们。

RegisterHotKey在我的实验中似乎没有做任何事情。 也许我做错了吗? 也许XAML岛在到达我们的wndproc之前就已经吃了WM_HOTKEY消息了? 无论如何,似乎都没有对该功能的任何反馈,因此我不确定在“多实例模式”下该功能有多有用。

SendMessage(_window.get(), WM_SETHOTKEY, VK_OEM_3, 0)实际上_did_工作。 如果还有另一个设置了该热键的窗口,它甚至会返回2 ,这很好。 这将为我们完成所有工作-在系统上_anywhere_按下该键时,即使最小化了它,它也会激活“终端”窗口。 不确定“最小化到任务栏”,但是进度就是进度。

不幸的是,让第二个终端窗口等待第一个窗口关闭,然后让它拿起热键并不是一件容易的事。 另外,如果有3个打开的WT窗口,谁会获得热键? 因此,现在,只有第一个窗口将获得分配给它的热键,然后所有随后创建的窗口都将获得分配给它们的热键,直到关闭第一个窗口。 然后,_next WT窗口created_将获得热键。 那肯定很尴尬。

重新加载设置可能还会导致_random_ WT窗口获得分配的热键。

这个线程中有很多问题,所以我将尝试对它们进行总结,但还没有规定整体解决方案。

  • 在任何地方按热键即可激活单个“终端”窗口(需要单实例模式以及全局热键支持)
  • 在任意位置按热键可激活当前监视器上的单个“终端”窗口。 如果以前不在该显示器上,请将其移到那里。 (需要单实例模式以及全局热键支持)
  • 按下热键激活“最近”终端窗口。 (这可能需要一些IPC,例如#5000正在工作)
  • 最小化到托盘,按热键激活单个终端窗口/最近的终端窗口(#5727)
  • 终端未出现在alt + tab视图中,请按热键激活单个终端窗口/最近的终端窗口(我不确定这与上面的窗口不同)
  • 当使用热键召唤终端时,请使其从顶部“滑入”(不确定上述SendMessage(WM_SETHOTKEY)方法是否可行)。

    • 同样,在停用时滑出吗?

哇,我敢肯定,我错过了此线程的95条注释所涵盖的某些情况,但是已经是一堆乱七八糟的设置了。


编辑2020年8月17日:哦,嘿,这就是PowerToys如何将键盘挂接到全局消息的方法,让我们这样做吧。
https://github.com/microsoft/PowerToys/blob/49b56d9b52bdfedd6ad1404bd0b20e884d2b574b/src/modules/shortcut_guide/shortcut_guide.cpp#L150 -L173

以我的拙见,将托盘声音最小化是一种不同的功能。

在不同的显示器上召唤多实例和召唤不同的实例听起来像是此功能的第二次迭代。

我认为最好先专注于更简单的场景,例如通过热键上的滑入和同一热键上的滑出召唤单个实例。 如果存在多实例,则应该有一条规则被召唤出来,

IMO,因为WT有多个选项卡,所以最好的情况是一个实例,如果有多个虚拟桌面或监视器,则会在鼠标所在的位置被召唤。 像瓜克一样。

@ zadjii-msft,您好:我也一直在研究一些类似的领域,因此我希望巩固研究成果,并分享一些实现思想。 通读这些材料,我不确定团队是否正在寻找利用可能相关的UAP / UWP功能的方法,所以希望我还没有被遗忘!

首先,热键注册。 我发现WM_HOTKEY研究是您对此处概述的UWP热键注册路线的补充。 您已经考虑过这种方法吗? 我认为这可能是一个不错的方法,因为已经实现了“在此处启动Windows终端”资源管理器上下文菜单,无需构建/测试AppService / IPC(#5000),因为我们可以简单地扩展和增强现有功能。

在深入研究时,我遇到了这个可能相关的SO答案,概述了附加到Windows.UI.Core.CoreDispatcher.AcceleratorKeyActivated的方法,以便在按下特殊键组合(例如CTRL+~时接收通知。 这可能适用吗?

说到流程模型...

不幸的是,让第二个终端窗口等待第一个窗口关闭,然后让它拿起热键并不是一件容易的事。 另外,如果有3个打开的WT窗口,谁会获得热键? 因此,现在,只有第一个窗口将获得分配给它的热键,然后所有随后创建的窗口都将获得分配给它们的热键,直到关闭第一个窗口。 然后,_next WT窗口created_将获得热键。 那肯定很尴尬。
重新加载设置可能还会导致_random_ WT窗口获得分配的热键。

这些挑战有一个共同点,一旦被淘汰出局,事情就会变得更加清晰和简单。 通用线程是wt实例管理中涉及的逻辑和复杂性-我认为其余大部分是该核心挑战的结果。 像许多挑战一样,最好通过将其分解为较小的挑战来解决。 在这里,我认为引入中介使得WT无需了解有关实例管理的任何知识,更不用说处理全局(例如,应用程序不在重点范围内)热键注册和绑定了。 从SRP的角度来看,这吸引了我,而且在我看来,提供“在此处启动Windows Terminal”浏览器上下文菜单的工作在概念上(即使实际上不是)与此也保持一致。 IPC服务可以使用UWP桌面扩展的TriggerEvent将串行化的动作(命令)传递给正在运行的wt实例,或者将其解析并作为启动参数传递给新的wt进程

处理全局热键的进程既是系统托盘应用程序,又是单实例模式进程(可能是WinForms应用程序),其中包含NotifyIcon组件以及系统托盘图标的上下文菜单和调度程序组件。 这具有积极的副作用,避免了向WT代码库添加大量新的和复杂的设置+逻辑的需要,因为wt不需要了解所谓的“地震模式”:微笑:。 systray应用程序将是这些类型的设置的源/存储库,我认为它将绝对可以与#7170一起使用并从中受益

  • 在任何地方按热键即可激活单个“终端”窗口(需要单实例模式以及全局热键支持)

systray应用程序的上下文菜单可以具有弹出窗口,该弹出窗口显示wt配置文件列表,用户可以在单击“以Quake模式的样式”时单击以选择要使用的配置文件。 如果未指定,它可能默认为列出的第一个配置文件。 如果有计划/规格来实现用于获取配置文件及其详细信息列表的内部逻辑,则设计将受益于在wt.exe流程之外使用的功能(例如,notifyicon应用程序不必重复功能)加载配置文件列表等)。 由于systray应用程序管理实例,因此wt本身不一定需要实现单实例模式。 PowerToys仓库在清单中显示

总结一个已经密集的信息:

如果您考虑这种方法,大多数项目符号的担忧会消失或得到很大缓解。 当我退后一步查看整体时,我觉得此功能比我们想象的更接近实现!

  • 在任意位置按热键可激活当前监视器上的单个“终端”窗口。 如果以前不在该显示器上,请将其移到那里。 (需要单实例模式以及全局热键支持)
  • 按下热键激活“最近”终端窗口。 (这可能需要一些IPC,例如#5000正在工作)
  • 最小化到托盘,按热键激活单个终端窗口/最近的终端窗口(#5727)
  • 终端未出现在alt + tab视图中,请按热键激活单个终端窗口/最近的终端窗口(我不确定这与上面的窗口不同)
  • 当使用热键调用终端时,请使其从顶部“滑入”(不确定上述SendMessage(WM_SETHOTKEY)方法是否可行)。

    • 同样,在停用时滑出吗?

NotifyIcon,WinForms和WPF的资源:
http://www.abhisheksur.com/2012/08/notifyicon-with-wpf-applications.html
https://www.codeproject.com/articles/36788/wpf-xaml-notifyicon-and-taskbar-system-tray-popup
https://mcguirev10.com/2019/01/27/system-tray-icons-wpf-net-core-preview.html

HTH!

编辑:
仔细阅读流程模型规范草案,您似乎已经确定了单独的流程方法。 我想“君主”的一部分可以全部或部分地由IPC / appservice播放

我制作了一个快捷实用的实用程序,该实用程序注册了全局热键以切换上一个Windows Terminal窗口。 我认为在正式实施之前,这将是一个不错的解决方法。

https://github.com/Inndy/TerminalSummoner

我从https://github.com/ehpc/quake-windows-bash修改了自动热键解决方案,以获得更好的用户体验。 我没有研究过@Inndy的解决方案,所以可能更好。

我的脚本位于这里: https :

使用热键Ctrl +`

  1. 如果未启动Windows终端,它将启动它*
  2. 如果启动但已最小化,则将其还原
  3. 如果它是活动的,它将被最小化
  4. 否则(意味着它已恢复但不清晰),将其聚焦

*注意:此脚本还使用了我喜欢使用的Windows快捷方式,该快捷方式在打开时添加了一些选项
https://github.com/rengler33/dotfiles/blob/master/C/Users/Rub/wt.exe.lnk
但是可以替换为仅启动BashHandle而不是Shortcut

我从https://github.com/ehpc/quake-windows-bash修改了自动热键解决方案

感谢那。

我受到@ rengler33脚本的启发,
https://gist.github.com/oryon-dominik/562970f77f2ad4d9bd57bea58ddc8ef5
该脚本在活动屏幕上生成Windows终端。 (CTRL +圆圈符号)
不良的动画和一些闪烁的现象,因此更像是一种解决方法。

我真的很希望正式实现此功能。

我也想从ConEmu切换到Windows Terminal,但是我也缺少Quake Style。 如果有人感兴趣-我创建了一个小型应用,该应用存储并拉出Windows终端窗口(如果需要,您可以添加其他应用以具有这种Quake风格)。

在此处检查我的仓库和所有功能: https :

我真的希望该功能会在某些时候默认启用。 现在,随时使用我的小解决方案。

我也想从ConEmu切换到Windows Terminal,但是我也缺少Quake Style。 如果有人感兴趣-我创建了一个小型应用,该应用存储并拉出Windows终端窗口(如果需要,您可以添加其他应用以具有这种Quake风格)。

在此处检查我的仓库和所有功能: https :

我真的希望该功能会在某些时候默认启用。 现在,随时使用我的小解决方案。

这次真是万分感谢。 有没有一种方法可以调整Windows Terminal窗口出现的动画速度。

@mkanet我想将有关其他人项目的讨论重定向到他们的repo ,并让该主题专注于当前的问题。 谢谢!

另一个想法可能是命令wt.exe的参数,例如:-T,--toggle
如果终端实例不存在,请打开一个新的
其他(如果活动,请最小化其他还原/激活)

它类似于上面的AutoHotKey逻辑,但位于wt.exe内部,并且可通过.lnk快捷方式/全局键映射/ Windows任务栏Win + Number等访问。

如果您不需要其他第三方应用程序,那就太好了。 而且我也沉迷于Ctrl +`

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

相关问题

mrmlnc picture mrmlnc  ·  3评论

warpdesign picture warpdesign  ·  3评论

ghost picture ghost  ·  3评论

zadjii-msft picture zadjii-msft  ·  3评论

DieselMeister picture DieselMeister  ·  3评论