Terminal: Запрос функции: выпадающая горячая клавиша ala quake / guake / tilda

Созданный на 10 мая 2019  ·  106Комментарии  ·  Источник: microsoft/terminal

Когда я захожу в Windows, мне больше всего не хватает мелочей, это наличие отдельного терминала горячих клавиш для каждого из трех моих мониторов. Ближе всего к вере в бога я когда-либо был, когда понял, что это можно получить, и если бы вы могли сделать это в Windows, мне, возможно, пришлось бы вас поцеловать.

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

Самый полезный комментарий

Для перехода с ConEmu мне потребуется режим Quake. Однако я бы предпочел, чтобы он всегда открывал один и тот же экземпляр, независимо от того, какой монитор / виртуальный рабочий стол сейчас в фокусе.

Лично я использую win + tilde для открытия ConEmu, но, очевидно, ярлык должен быть настраиваемым.

Все 106 Комментарий

Значит, вы имеете в виду, что если у вас три монитора (например), вы можете нажать другую горячую клавишу, чтобы заставить терминал скользить вниз в стиле консоли Quake с любого монитора, который вы выберете?

Значит, вы имеете в виду, что если у вас три монитора (например), вы можете нажать другую горячую клавишу, чтобы заставить терминал скользить вниз в стиле консоли Quake с любого монитора, который вы выберете?

Совершенно верно. Я знаю, что это кажется немного диковинным / ненужным / бесполезным для того, что должно было быть широко используемым основным терминалом, но я обещаю вам, что именно продуктивность действительно заставляет всплывающие окна горячих клавиш сиять.

В идеале каждый монитор должен иметь собственный терминал, который можно держать открытым одновременно с другими.
В nix, использующем 3 экземпляра Tilda, я настроил его так, чтобы f1 сбрасывал, закрывал или выбирал, если открыт, но не активен левый монитор. F2 - мой центральный экран, а f3 - мое. Я могу использовать эти горячие клавиши для переключения между этими тремя терминалами, если они уже открыты. Конечный результат превращает перемещение между терминалами и другими фоновыми приложениями в мечту рабочего процесса. Это также выглядит чертовски круто, если я сам так говорю.

Еще одна альтернатива Guake, которая мне нравится, ограничена только одним окном / экземпляром за раз, и она просто опускается на любой монитор, на котором в данный момент находится мышь в момент нажатия горячей клавиши. Это тоже очень полезная функция, но не то, что я ищу. Я бы не стал возражать против выбора в поведении, но строки кода не растут на деревьях, поэтому я предпочитаю дизайн тильды.

Мы действительно избалованы терминалом с точки зрения Nix, и именно это заставляет Microsoft стремиться создать новый, более продвинутый многофункциональный терминал, столь захватывающий. Кажется, что Microsoft борется за время, которое разработчики и будущие разработчики (студент здесь) проводят в своей операционной системе, и если бы вы подключили WSL2 к раскрывающемуся терминалу, я точно знаю, что потратил бы намного меньше времени на загрузку и далее между Mint и 10.

Для перехода с ConEmu мне потребуется режим Quake. Однако я бы предпочел, чтобы он всегда открывал один и тот же экземпляр, независимо от того, какой монитор / виртуальный рабочий стол сейчас в фокусе.

Лично я использую win + tilde для открытия ConEmu, но, очевидно, ярлык должен быть настраиваемым.

Да, один экземпляр выпадает, он должен упасть на монитор, где находится курсор мыши, и должен сфокусироваться, но он не должен отображаться, когда вы нажимаете Alt + Tab, поэтому кажется, что он вроде как встроен в ОС. Как гуаке.

@cyberhck , вы уверены, что он должен быть там, где находится мышь, а не там, где находится текущее окно с фокусом?

@Jaykul
Поведение Guake по умолчанию таково, что горячая клавиша активирует терминал на том мониторе, на котором в данный момент находится мышь, как описано в Cyberhck. Он также имеет возможность назначить ему конкретный монитор, если это необходимо. Он ограничен только тем, что одновременно может работать только один экземпляр, с чем Windows Terminal не имеет проблем. Если бы Windows Terminal мог быть настроен так, как guake, с выбором между статическим или следящим поведением, все, что ему потребовалось бы, это независимые настройки для каждого экземпляра, чтобы соответствовать функциональности как guake (Follow или static), так и tilda (несколько экземпляров).

Да, у нас может быть трехсторонняя конфигурация: один на одном конкретном мониторе, один на любом окне, в котором находится фокус, и один, где присутствует мышь (также очень важно иметь возможность скрыть из списка приложений (alt + tab), если этот режим включен, потому что я предполагаю, что пользователи не захотят это видеть при переключении между IDE и браузером)

:)

@Jakul , причина, по которой я говорю, где находится мышь, заключается в том, что когда вы просматриваете что-то, мышь всегда, вероятно, будет перед вашими глазами, и если вы используете короткие клавиши, действительно легко переключить глаза чем необходимость полностью перемещать мышь.

+1

Пожалуйста, не отвечайте на темы с помощью «+1» без полезного дополнительного отзыва. У Github есть отличный +1, который прямо здесь не пингует всех в почтовом ящике потока:
image

Значит, вы имеете в виду, что если у вас три монитора (например), вы можете нажать другую горячую клавишу, чтобы заставить терминал скользить вниз в стиле консоли Quake с любого монитора, который вы выберете?

Поведение по умолчанию на нескольких мониторах для Guake - это то место, где находится мышь, там, где опускается терминал.

Однако вы можете настроить его на любой монитор, который вы хотите, через настройки, если вы не хотите этого поведения.

Что мне нужно для этого, так это возможность отключить анимацию и полностью скрыть окно (с панели задач, alt + tab, win + tab и т. Д.)

Мне тоже нужна дополнительная опция, чтобы никогда не отображать кнопку панели задач, но она может выходить за рамки этой проблемы.

Мне нравится это предложение, и это единственное, что не позволит использовать его ежедневно (после выпуска). Мне нравится использовать ctrl + `в ConEmu, и из-за этого я даже не использую встроенный терминал VSCode. Однако я не уверен, сильно ли меня волнует идея привязки клавиш для каждого монитора.

Кроме того, будет ли это предложение включать запуск экземпляра терминала, если ни один из них не запущен, аналогично другим терминам Linux, таким как раскрывающийся список терминала xfce с ярлыком приложения ? Я бы не возражал, если бы это был Win + `как системный ярлык, аналогичный Win + \

Это можно было бы сделать с помощью ярлыка, существующего где-то с привязанной к нему глобальной горячей клавишей, и этого ярлыка, использующего CLI для вызова переключения, если какой-то экземпляр уже запущен. Создание общесистемных горячих клавиш кажется плохой идеей.

Я бы больше подумал о разработке для Windows (в настоящее время 95% сделано для Linux), если бы у меня был терминал, который мог бы выпадать, как guake.

Я в основном использую cmder / conemu и в Windows, и это также основная причина, по которой я еще не переключаюсь, тем более что я использую два монитора и (обычно) 3 рабочих стола, без глобального способа просто вызвать терминал. По сути, есть 6 мест, где может быть фактическое окно, звучит глупо, но это раздражает.

Кроме того, многие из вас упоминают об использовании для этого сочетания клавиш, но всем вам следует подумать о том, чтобы сопоставить его с выделенной кнопкой мыши и, если возможно, жестом. Поблагодаришь меня позже.

Рад видеть, что другие люди воодушевлены идеей настраиваемого выпадающего меню. Понятно, что у людей есть очень разные предпочтения относительно того, как эти раскрывающиеся списки ведут себя по умолчанию, но верят, что предпочтение большинства становится возможным, если

  1. Каждый экземпляр можно настроить для слежения за мышью или привязки к одному монитору.
  2. У каждого экземпляра может быть своя горячая клавиша.

Тогда неважно, что вам нравится, в пределах настраиваемых возможностей.

Я лично использую комбинацию quake и tilda, так что у меня есть один терминал, привязанный к каждому экрану, и один, который следует за мышью.

@NOFUNEVER у вас есть большая часть того, о чем люди просят, но @cyberhck и @zakius определили еще пару функций, которые могут быть важны:

  • Добавьте фокус окна в список параметров конфигурации в дополнение к привязке монитора / отслеживанию мыши.
  • Должен ли быть настраиваемый параметр, чтобы он не отображался на альтернативной вкладке / панели задач?

Похоже, все еще обсуждается, должно ли это иметь несколько экземпляров, например tilda (который я никогда не использовал и не могу комментировать), или один экземпляр, например Guake. Я что-то еще упускаю? Если нет, мы должны решить этот вопрос и перейти к написанию спецификации.

( @zakius , вы также упомянули о желании отключить выпадающую анимацию. Причина? Я не вижу в этом ничего плохого, но оправдание может помочь.)

Мне в целом не нравятся анимации, поскольку они крадут мое внимание (если что-то движется, вы инстинктивно смотрите на это, в те времена это могло спасти вам жизнь). Но есть также то, что я называю blocking animations , те, которые вам нужно подождать, прежде чем вы сможете предпринять действия, не позволяющие вам читать текст или выполнять команды ввода. Это еще больше мешает рабочему процессу, поскольку у вас нет другого выбора, кроме как ждать, некоторые из них были разработаны, чтобы отмечать медленное выполнение, но на быстрых машинах они замедляют вас.

Лучшим подходом будет возможность выбрать время анимации с 0, полностью отключив его

нам не нужна анимация, такая как Mac, которая слишком медленная, но guake заканчивает анимацию менее чем за 100 мс, я думаю, так что это быстро, возможно, задержка также может быть конфигурацией, 0 - без анимации. Анимация Guake кажется "правильной", она очень быстрая, но вы можете видеть, откуда она идет и куда идет.

Было бы здорово добавить конфигурацию, так как кто-то, кому не нравится анимация, может отключить ее или превратить в медленную анимацию, такую ​​как Mac, я бы просто сделал 80 мс или 120 мс.

Ах, как бы мне хотелось, чтобы ConEmu был решением для меня, он не работает для всех, он построен на основе Hotkey, и все, что находится поверх горячей клавиши, обнаруживается как троян (ложная тревога).

Многие люди используют терминал для работы, и их работа не позволяет им установить что-то, что определяется как троян. (то же, что и Qonsole) https://github.com/joedf/Qonsole/issues/9

Еще одна важная вещь, которую следует учитывать при реализации, - это то, что раскрывающийся список должен появиться на текущем активном виртуальном рабочем столе. Я активно использую виртуальные рабочие столы. Когда я впервые начал использовать ConEmu, я обнаружил, что раскрывающийся терминал всегда перемещал меня обратно на рабочий стол 1, а затем отображал раскрывающийся список. В конце концов я нашел настройки, позволяющие заставить его работать должным образом в ConEmu, и очень важно, чтобы терминал Windows вел себя таким же образом.

Да, на самом деле это должно было быть очевидным: D представьте, что вы нажимаете горячую клавишу и терминал появляются на первой, когда вы находитесь в другой рабочей области.

Итак, пока наши повелители не добавят это в терминал, я придумал простой фрагмент C #, который тем временем исправляет это для меня: https://github.com/flyingpie/windows-terminal-quake.

Он раскрывается в стиле Quake с помощью CTRL + ~ и CTRL + Q, что, конечно, можно полностью изменить. В настоящее время выпадает полноэкранный режим и появляется экран + рабочее пространство, где находится мышь.

Если кого-то привлечет, я открыт для предложений и / или PR.

@flyingpie У вас получился неплохой фрагмент кода. Похоже, что большая часть этого будет работать и на C ++, так что это полезно знать.

Я просто хочу повторить, что хотя ни у кого в команде не будет циклов, чтобы сделать это для 1.0, мы с радостью рассмотрели бы вклад сообщества. В идеале кто-нибудь из сообщества сможет объединить предложения и комментарии из этой ветки в шаблон спецификации и отправить PR для этой спецификации. Как только эта спецификация будет одобрена, мы с радостью рассмотрим PR с необходимым изменением кода. Мне кажется, @flyingpie действительно

У меня аналогичный вариант использования. Я не использую стиль Quake, но мне очень нравится всегда открытый терминал.

Моя установка ConEmu делает следующее, чего, похоже, пока не хватает wt.exe (в грубом порядке важности):

  1. Мой ConEmu буквально не закрывается, кроме как при выключении или по явному запросу. Если я закрою последнюю вкладку, она все равно будет открыта, только без вкладок.
  2. Он запускается каждый раз в одно и то же место. (0,0) на моем втором мониторе.
  3. У меня есть глобальная горячая клавиша для переключения фокуса (ctrl + `).
  4. Он не отображается на панели задач. Он имеет значок в трее.
  5. Вы можете запустить только один экземпляр.
  6. Он автоматически запускается при входе в Windows. (важно для следующего)
  7. Это терминал по умолчанию, автоматически использующий другие терминалы (IE, если я запускаю wt.exe, а затем запускаю cmd.exe, я бы ожидал, что wt.exe просто откроет новую вкладку с новой вкладкой cmd.exe) *

Все это примерно блокирует мне переход на wt.exe с ConEmu.

Дополнительно:

  • Некоторые люди хотят всегда быть на высоте.
  • Некоторые люди хотят минимизировать потерю фокуса, и эти люди обычно хотят отключить анимацию минимизации / максимизации.
  • Некоторые хотят, чтобы при фокусировке терминал переходил к их «активному» монитору.
  • Некоторым нужно несколько экземпляров терминала? *

Это все разные функции, которые должны иметь свои собственные спецификации IMO. Я готов продвигать часть этого процесса спецификации. @ zadjii-msft Знаете ли вы о каких-либо из этих пунктов, которые уже имеют спецификации, не будут выполнены по какой-либо причине и т. д.?

* Сложно?

Итак, вы перечислили ряд отдельных проблем, дайте мне посмотреть, смогу ли я связать их все:

  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, когда окно скрыто

Несколько экземпляров означают несколько окон, которые, как я полагаю, могут, но не обязательно, распределяться по нескольким экранам или виртуальным рабочим столам, но это сделает обработку глобальных горячих клавиш намного более сложной или даже невозможной (я думаю, что conemu отключает несколько экземпляров при включении режима землетрясения)

Для 11 / «несколько экземпляров означает несколько окон», я конкретно имею в виду то, что описан здесь OP: https://github.com/microsoft/terminal/issues/653#issuecomment -491389892

Меня это особо не волнует, но это отдельный вопрос. Я предполагаю, что они хотят, чтобы несколько глобальных горячих клавиш открывали / активировали / фокусировали несколько экземпляров так же, как я хочу одну горячую клавишу для пункта № 3 в моем списке.

@zakius

Я уже упоминал 4. раньше, чтобы убедиться, что Терминал не отображается ни на Alt + Tab, ни на Win + Tab, когда окно скрыто

Несколько экземпляров означают несколько окон, которые, как я полагаю, могут, но не обязательно, распределяться по нескольким экранам или виртуальным рабочим столам, но это сделает обработку глобальных горячих клавиш намного более сложной или даже невозможной (я думаю, что conemu отключает несколько экземпляров при включении режима землетрясения)

Отключение нескольких экземпляров - это то, что происходит на ConEmu при использовании раскрывающегося списка Quake.
Практически невозможно обработать такое поведение логически, вы должны использовать свои вкладки или использовать терминальный мультиплексор, если вам нужно что-то вроде нескольких экземпляров с выпадающим списком с quake.

РЕДАКТИРОВАТЬ:
Возможно, вы могли бы работать в чем-то, где первое открытое окно терминала является главным, и это окно всегда вызывается при использовании горячей клавиши Quake.

Может быть сложно работать с этим с поддержкой вкладок - возможно, поэтому ни один другой терминал, о котором я знаю, не поддерживает такое поведение. В этом сценарии также следует учитывать крайний случай, например, что произойдет, если вы закроете свое главное главное окно, а дополнительное окно все еще открыто - будет ли горячая клавиша продолжать игнорировать это дополнительное окно терминала и т. Д.

Для ConEmu, когда Quake включен и вы снова пытаетесь открыть ConEmu (скажем, с ярлыка на рабочем столе), он не открывает новое окно, вместо этого он просто фокусирует существующий работающий терминал.

Возможно, вы могли бы работать в чем-то, где первое открытое окно терминала является главным, и это окно всегда вызывается при использовании горячей клавиши Quake.

есть также возможность разрешить запуск одного экземпляра на физическом экране на виртуальном рабочем столе, и таким образом основная горячая клавиша всегда будет вызывать экземпляр на вашем текущем активном виртуальном диске и экране, но это довольно сложно, я думаю, что отключение нескольких экземпляров разумно

Я думаю, что несколько экземпляров можно игнорировать, если вкладки продолжают улучшаться и окно в стиле Quake можно будет вызывать из любого места. По крайней мере на данный момент.

есть также возможность разрешить запуск одного экземпляра на физическом экране на виртуальном рабочем столе, и таким образом основная горячая клавиша всегда будет вызывать экземпляр на вашем текущем активном виртуальном диске и экране, но это довольно сложно, я думаю, что отключение нескольких экземпляров разумно

Я бы не стал полностью игнорировать несколько экземпляров - иногда очень удобно открыть терминал на одном экране, который транслирует журналы или показывает загрузку системы во время работы в другом терминале на соседнем экране.

Раньше я использовал рабочий стол Ubuntu в течение последних нескольких лет (только что вернулся к Windows после WSL v2), и, поскольку Guake и терминал Ubuntu очень похожи с точки зрения скорости отклика, дизайна пользовательского интерфейса / тем и т. Д., Я часто открывал терминал Ubuntu по умолчанию на моем вертикальном экране смотрю журналы и загрузку системы.

Очевидно, что это простой способ решения проблемы, если несколько экземпляров с раскрывающимся списком отключены - используйте другой терминал.
Проблема в том, что большинство терминалов в Windows - полный мусор (отсюда и этот проект ofc).

дополнительные экземпляры были с несколькими мониторами, когда я предложил
Это. По одному на монитор, каждый со своей горячей клавишей. Я использую портретный пейзаж
портрет настроил дома, и во время бега мяты заставил гуаке бегать в
center, но он не предлагает дополнительных экземпляров, которые есть у tilda, поэтому я использую его на
внешние портретные мониторы.

В понедельник, 16 сентября 2019 г., в 14:00 nofunatall [email protected] написал:

есть также возможность разрешить запуск одного экземпляра для
физический экран на виртуальный рабочий стол, и поэтому основная горячая клавиша всегда
вызвать экземпляр на вашем текущем активном виртуальном диске и экране, но это
довольно сложно, я думаю, что отключение нескольких экземпляров разумно

Я бы не стал полностью игнорировать несколько экземпляров - иногда это очень удобно
чтобы открыть терминал на одном экране, который транслирует логи или показывает систему
загружать при работе в другом терминале на соседнем экране.

Раньше я использовал рабочий стол Ubuntu в течение последних нескольких лет (просто
вернулся к Windows с WSL v2), а с тех пор, как Guake и терминал Ubuntu
очень похожи с точки зрения отзывчивости, дизайна пользовательского интерфейса / тем и т. д. Я часто
был открыт терминал Ubuntu по умолчанию на моем вертикальном экране просмотра журналов
и системная нагрузка.

Очевидно, что это простой способ решения проблемы, если несколько экземпляров с
раскрывающийся список отключен - используйте другой терминал.
Проблема в том, что большинство терминалов в Windows - полный мусор (следовательно, это
проект офс).

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/microsoft/terminal/issues/653?email_source=notifications&email_token=ACAH5BIA5ZPETCBZK77LMVLQJ7XYVA5CNFSM4HL735C2YY3PNVWWK3TUL52-5DFVREXWG43
или отключить поток
https://github.com/notifications/unsubscribe-auth/ACAH5BM722EZEB5LQBXGW6TQJ7XYVANCNFSM4HL735CQ
.

Ребята, у нас здесь явно две отдельные проблемы. Можем ли мы отредактировать это так, чтобы оно было связано с горячими клавишами в стиле Quake (глобальный / одиночный терминал)?

Затем вторая проблема, которая будет заблокирована этим, чтобы позволить назначить выделенную горячую клавишу «Стиль Quake» для разных дисплеев.

Первый кажется более популярным и желанным. Я хотел бы видеть вторую тоже (классная идея @NOFUNEVER никогда не думал о такой функции, кажется полезным), но было бы неплохо , если бы мы могли бы прояснить тему немного.

Проблема ОП на самом деле скорее вторая, несмотря на название этой проблемы. Тем не менее, я думаю, что открытие горячей клавиши на одном терминале в значительной степени блокируется # 2080. У нас действительно не может быть горячей клавиши для открытия одного терминала, пока мы не сможем принудительно применить один терминал.

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

Думаю, это лучшая поломка.

@rlabrecque Да, я знаю, что первоначальная проблема была связана с более изящным решением, но, глядя на комментарии, большинство людей выражали желание использовать только стиль «землетрясение», гораздо меньше людей интересовались пользовательскими горячими клавишами для любого дисплея.

Вот почему я предложил преобразовать эту проблему в проблему, связанную со стилем землетрясения, и выделить последующий запрос функции в отдельную проблему, где мы также сможем ее отслеживать.

Мне кажется, это нужно разбить на несколько проблем для каждой из различных функций, начиная с фундаментальной функции «горячие клавиши для переключения-видимости». Это можно сделать без каких-либо других функций, верно?

При наличии множества проблем было бы намного легче увидеть, каков спрос на каждый конкретный поворот рецепта, и определить приоритеты разработки. Похоже, что минимально жизнеспособная функция почесала бы многих людей.

Разве это не то, что описывает https://github.com/microsoft/terminal/issues/653#issuecomment -520419611?

Для всех, кто ожидает переключения с conemu (например, я) и т. Д. Вы можете использовать autohotkey и закрепленный элемент на панели задач в качестве обходного пути.

скрипт autohotkey:

^`::Send #5

Это отобразит ctrl + `на winkey + 5, измените это в соответствии с вашими потребностями.

инструмент, предоставляемый flyingpie, намного лучше: не требует закрепления и полностью скрывает кнопку панели задач, tbh я использую его с другим приложением (так как Терминал пропускает еще несколько вещей)

Пройдя немного дальше решения 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 + ½ (на датской клавиатуре, верхняя левая кнопка под escape) с функцией, которая переводит запущенный экземпляр терминала в фокус или запускает новый экземпляр, если он не запущен, и изменяет размер и позиционирует его «правильно». Если терминал уже в фокусе, он скрывает окно (поэтому оно не отображается в alt + tab).

Я немного обновил решение

Вы можете найти код здесь , или скопировать его прямо снизу:

; 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://gist.github.com/alenbasic/004c5abeb4cc0e0b31b7681371d48898

Упомянутая одна из связанных повторяющихся проблем, включая поддержку режима управления tmux, что в настоящее время поддерживается только iTerm в Mac OS. Это невероятно мощный функционал, но, насколько мне известно, все попытки реализовать его в других терминалах закончились тихой смертью не поддерживаемых форков. Было бы здорово иметь его вне Mac OS.

Я пошел дальше и начал проект, в значительной степени из-за этой функции. https://github.com/dotjosh/WinTermPlus

@dotjosh Отлично выглядит! Есть ли причина, по которой вы реализовали это как отдельный инструмент, а не как PR? Сколько усилий потребовалось бы, чтобы объединить это?

@dotjosh Отлично выглядит! Есть ли причина, по которой вы реализовали это как отдельный инструмент, а не как PR? Сколько усилий потребовалось бы, чтобы объединить это?

Я силен в C # / WPF, и мне удалось это сделать быстро. Я был бы готов помочь перенести его, если мы будем довольны поведением.

Честно говоря, это выглядит супер круто. Я определенно буду счастлив просмотреть этот пиар.

Может быть немного сложно перенести элементы панели задач на панель задач в более похожую на UWP модель, которая у нас есть (вам, вероятно, придется испортить package.appxmanifest), хотя этот учебник выглядел хорошо . Также, вероятно, имеет смысл установить настройки размера для открытия окна в пределах profiles.json , а также определить привязку там (даже если на самом деле это ничего не делает в TerminalApp, поскольку я предполагаю, что привязку нужно будет зарегистрировать в самой ОС.Я уверен, что есть способ сделать это на C ++, хотя я не знаю, что это такое 😄

Просто процитирую то, что я сказал раньше:

Я просто хочу повторить, что хотя ни у кого в команде не будет циклов, чтобы сделать это для 1.0, мы с радостью рассмотрели бы вклад сообщества. В идеале кто-то из сообщества сможет скомпилировать предложения и комментарии из этой ветки в шаблон спецификации и отправить PR для этой спецификации. Как только эта спецификация будет одобрена, мы с радостью рассмотрим PR с необходимым изменением кода. Мне кажется, @flyingpie @dotjosh действительно

Честно говоря, нам действительно не нужно _все_ в заполненном шаблоне спецификации, я просто очень хотел бы убедиться, что любой вклад, который мы принимаем, продуман здесь крайние случаи и четко определяет поведение для этих случаев. А именно:

  • Что происходит, когда у пользователя еще не открыт экземпляр терминала, и он нажимает глобальную горячую клавишу?
  • Что происходит, когда у пользователя открыто несколько окон терминала? Какой открывается? В этом случае ничего не происходит?

    • Когда открыто несколько окон терминала и один терминал в данный момент сфокусирован, глобальная горячая клавиша скрывает активное окно или вызывает свернутое?

  • Может ли пользователь выбрать, чтобы окно было развернуто? Полноэкранный?
  • Что происходит, когда у пользователя еще не открыт экземпляр терминала, и он нажимает глобальную горячую клавишу?

Я думаю, это зависит от того, какой именно экземпляр терминала. Если Терминал не запущен, ничего не должно происходить. Я не думаю, что здесь должна быть какая-то услуга или что-то еще. Если в Терминале не осталось оболочек, он все равно должен работать, ожидая открытия новой оболочки. Выход из терминала должен быть более явным.

  • Что происходит, когда у пользователя открыто несколько окон терминала? Какой открывается? В этом случае ничего не происходит?
  • Когда открыто несколько окон терминала и один терминал в данный момент сфокусирован, глобальная горячая клавиша скрывает активное окно или вызывает свернутое?

Я думаю, что общее предположение заключается в том, что этот режим допускает только один экземпляр терминала. Запуск исполняемого файла во второй раз просто сфокусировал бы терминал, возможно, запустив в нем новую оболочку по умолчанию? (Во многом аналогично функциям приложений UWP. Откройте «Настройки», затем выберите что-нибудь еще, затем снова откройте «Настройки», только один экземпляр.)

  • Может ли пользователь выбрать, чтобы окно было развернуто? Полноэкранный?

Я не понимаю, почему бы и нет, если в настоящее время поддерживаются оба варианта. 👍 Горячая клавиша будет работать примерно так же, как сворачивание / восстановление из свернутого в обоих случаях.

Могу я предложить начать с пользовательского опыта других популярных терминалов и изменить его оттуда, если они не оптимальны?

  • Что происходит, когда у пользователя еще не открыт экземпляр терминала, и он нажимает глобальную горячую клавишу?

Ничего, потому что терминал не запущен. Кроме того, горячая клавиша должна быть отпущена для использования другими программами в этом случае. Так ведут себя ConEmu и Terminator.

  • Что происходит, когда у пользователя открыто несколько окон терминала? Какой открывается? В этом случае ничего не происходит?

Если активна настройка одного экземпляра: не может быть открыто несколько окон.

Если настройка одного экземпляра не активна, Terminator отправляет команду всем экземплярам, ​​и все они переключают состояния. Это могло бы быть самым простым решением; не имеет большого смысла использовать режим землетрясения с несколькими экземплярами, и таким образом терминалы не будут постоянно застревать в скрытом состоянии (терминатор скрывает окно с панели задач в скрытом состоянии).

ConEmu: включение режима землетрясения приводит к принудительному использованию режима единственного экземпляра и убирает этот флажок. Это имеет больше смысла с точки зрения поведения, но вносит больше сложности.

Я не думаю, что отсутствие режима единственного экземпляра (# 2227) должно мешать реализации этой функции.

  • Когда открыто несколько окон терминала и один терминал в данный момент сфокусирован, глобальная горячая клавиша скрывает активное окно или вызывает свернутое?

См. Выше - оба. Он переключает их состояния.

  • Может ли пользователь выбрать, чтобы окно было развернуто? Полноэкранный?

И в ConEmu, и в Terminator это не имеет отношения к режиму землетрясения, окно восстанавливается в то состояние, в котором оно находилось до того, как оно было скрыто. Если он был в полноэкранном режиме, он возвращается в полноэкранный режим; то же самое для развернутых и не развернутых окон.

просто немного придирчиво: ни один из популярных терминалов не использует фактический (эксклюзивный) полноэкранный режим, но может быть отображен без полей

и я думаю, что это намного лучше для случая использования

С точки зрения пользователя, основное различие между «полноэкранным» и максимальным оконным режимом заключается в том, что «полноэкранный режим» закрывает панель задач.
-------- Исходное сообщение -------- От: zakius [email protected] Дата: 15.11.2019 22:38 (GMT + 00: 00) Кому: microsoft / terminal terminal @ noreply.github.com Копия: Igroeg Okiob [email protected] , Комментарий [email protected] Тема: Re: [microsoft / terminal] Запрос функции: раскрывающийся
quake / guake / tilda (# 653) просто немного придирчив: ни один из популярных терминалов не использует фактический (эксклюзивный) полноэкранный режим, но может отображаться без полей
и я думаю, что это намного лучше для случая использования

- Вы получили это, потому что прокомментировали. Ответьте на это письмо напрямую, просмотрите его на GitHub или откажитесь от подписки.
[
{
"@context": " http://schema.org ",
"@type": "EmailMessage",
"possibleAction": {
"@type": "ViewAction",
"цель": " https://github.com/microsoft/terminal/issues/653?email_source=notifications\u0026email_token = AB2TW7D3V347CBC62MCQ32TQT4QHVA5CNFSM4HL735C2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEG5YSA # issuecomment-554556488",
"URL": " https://github.com/microsoft/terminal/issues/653?email_source=notifications\u0026email_token = AB2TW7D3V347CBC62MCQ32TQT4QHVA5CNFSM4HL735C2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEEG5YSA # issuecomment-554556488",
"name": "Просмотреть выпуск"
},
"description": "Посмотреть эту проблему на GitHub",
"publisher": {
"@type": "Организация",
"name": "GitHub",
"url": " https://github.com "
}
}
]

Обязательно используйте горячие клавиши в стиле консоли Quake (ConEmu). Кто-нибудь смог подключить Терминал к ConEmu?

@dotjosh Отлично выглядит! Есть ли причина, по которой вы реализовали это как отдельный инструмент, а не как PR? Сколько усилий потребовалось бы, чтобы объединить это?

Я силен в C # / WPF, и мне удалось это сделать быстро. Я был бы готов помочь перенести его, если мы будем довольны поведением.

Мы! Можем ли мы получить запрос на перенос?

Я хочу сказать, что вам нравится то, что вы делаете с новым Терминалом. И я полностью понимаю, что не могу получить доступ к запросу функции из-за других приоритетных заявок. Это случается с каждой командой, моя команда тоже от этого не застрахована.

Но я должен сказать, что отсутствие этой функции - это отказ PM и вроде как показывает, что они не полностью понимают влияние этой функции на такое количество пользователей. Это что, 2 указателя? может быть 3?

Это низко висящий фрукт, который оказывает огромное влияние. Мне нравится, что вы, ребята, принимаете публичные пиарщики, но если публика этого не делает, начните спринт. Этот билет открыт уже год.

Для некоторых людей это совсем не важно, для других это нарушение сделки, хотя я смогу жить без этого благодаря некоторым обходным путям, опубликованным здесь, поэтому лично я бы отдавал приоритет вещам, которые нельзя дополнять каким-либо образом, например # 574 (или, вероятно, многие другие, это всего лишь мой второй отказ от сделки)

Правильно. Вы говорите о том, что нам не удалось правильно расставить приоритеты, и я понимаю, что эта функция важна для вас. Однако я хотел бы спросить: с четырьмя инженерами в основной команде, какие из функций, реализованных на следующих этапах (запрос с ограничением области действия, плюс отдельные функции), мы должны сократить, чтобы освободить место для настраиваемого управления окнами?

  • _ Функции, отмеченные как фиксированные и закрытые _
  • доступность
  • вкладки в заголовке
  • панели
  • проверка настроек
  • обнаружение профиля
  • рационализированная семантика выхода
  • правильный рендеринг идеографов CJK
  • поддержка ввода для пользователей клавиатуры, отличной от US-ANSI
  • изменение размера, которое не удаляет вашу историю
  • поиск
  • (я мог бы продолжить перечисление функций здесь)

Я могу поручить разработку одной, может быть, двух функций на разработчика в месяц. Прошло 10 месяцев, и большую часть этого времени у нас была команда из 2-3 человек вместо 4 человек.

Если вы можете определить, без каких из тех вещей, которые, по нашему мнению, следовало выпускать, мы должны были поставить, я буду рад провести с вами это обсуждение.

Я не говорю, что эти функции вообще не важны. Я хочу сказать, что это низко висящий фрукт с почти 300 пальцами вверх, с множеством дублирующих тикетов, созданных для него, и он не так задействован, как большинство других функций / исправлений ошибок, которые вы перечислили.

Я не хочу преуменьшать проделанную здесь работу, напротив, я думаю, что то, что команда сделала, просто потрясающе. И команда, и вы заслуживаете похвалы.

Может быть, я был немного резок, поэтому прошу прощения за это. Но я все еще думаю, что моя точка зрения остается неизменной. Конечно, решать вам и вашей команде, всего лишь мои два цента.

Если это такой низко висящий плод, то я был бы рад просмотреть PR от члена сообщества, касающийся этой функции 😉. В настоящее время команда разработчиков находится в спринте по замораживанию функций и исправлению ошибок / доработке в течение следующих нескольких месяцев. Мы обязательно рассмотрим наш список задач, которые начнутся после выхода 1.0, и я хочу прояснить, что команда понимает, что это популярный вопрос.

закрепить его на панели задач и использовать Win + 1 для доступа в качестве обходного пути (хотя сейчас я использую сценарий autohotkey kimbirkelund из https://github.com/microsoft/terminal/issues/653#issuecomment-541408854). Я не думаю, что это должно быть приоритетом.

Возможно, кто-нибудь сможет скомпилировать скрипт kimbirkelund или wizcas и предоставить двоичный файл для тех, кто не хочет устанавливать autohotkey?

есть гораздо лучшие обходные пути, чем держать его на панели задач, чего именно мы хотим избежать, но, как вы сказали, есть некоторые, поэтому, хотя и важно, он ниже в списке приоритетов, чем вещи, которые нельзя дополнить внешними инструментами

Добавляя мои два цента к обсуждению, моя модифицированная версия сценария AutoHotKey предоставленная @kimbirkelund :

  • Горячая клавиша: 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 прямо сейчас. Мы _ определенно_ не собираемся объединять какие-либо PR для этого до тех пор, пока мы не выпустим 1.0 на этом этапе, но это определенно то, о чем мы думаем втянуть в 2.0.

Я действительно не могу дать никаких оценок, когда какая-либо из этих дат наступает на данный момент, в основном просто «когда это будет сделано».

Извините, если это уже описано выше, так как я не читал подробно всю ветку. С точки зрения поведения; Я думаю, было бы лучше, если бы нам разрешили выбирать между «режимом землетрясения» или просто передним планом существующих окон / вкладок по горячей клавише.

В настоящее время я использую другую консольную платформу, которая просто дает мне флажок в настройках, чтобы «вывести приложение на передний план с помощью Ctrl + ~», но в остальном полностью соблюдает размер и состояние моего существующего окна.

Эта функция очень-очень-очень хорошая, поскольку часто у нас так много окон, и окно терминала (учитывая, что он почти всегда не полноэкранный) может теряться в фоновом режиме.

Самая важная часть заключается в том, что мы не просто масштабируем окно до полной ширины, но и сохраняем его строку заголовка. Строка заголовка также должна быть невидимой.

Извините, если это уже описано выше, так как я не читал подробно всю ветку. С точки зрения поведения; Я думаю, было бы лучше, если бы нам разрешили выбирать между «режимом землетрясения» или просто передним планом существующих окон / вкладок по горячей клавише.

Он терялся в скрытых элементах потока, но @flyingpie поделился программой C #, чтобы добавить функцию стиля землетрясения. Вы можете найти его здесь , и если вы посмотрите на Toggler.cs в строках 51 и 72, вы сможете изменить его поведение так, чтобы оно

Через некоторое время я переключился на подход ahk, одна из основных причин в том, что мне не нужно использовать VS для его создания, но после некоторой игры я получил действительно хорошие результаты, основа для этого тоже где-то в этом потоке

обратите внимание, что я использую его для Messenger, так как WT упускает для меня еще несколько вещей

_Альтернативное решение, пока для Терминала не появится собственный выпадающий режим. 😃_

Через пару недель использования я могу порекомендовать https://eugeny.github.io/terminus/

Хороший терминал с так называемым «режимом землетрясения» (Настройки> «Закрепить терминал» установлен на Top и «Горячие клавиши»> «Переключить окно терминала» на Ctrl-` ).

Он построен на Electron, поэтому он не «легкий», но довольно плавно работает с WSL2.

Мне понравилось устанавливать его на первую часть панели задач и открывать с помощью WIN + 1.

Моя единственная проблема в том, что я не всегда могу открыть его в админке, что равносильно тому, что WSL был непривычно загружен. Итак, щелкните правой кнопкой мыши, щелкните правой кнопкой мыши, откройте от имени администратора - WIN + 1 с этого момента.

@ chazt3n Если вы хотите открыть в админке с клавиатуры, это будет:
WIN + ALT + 1, чтобы открыть меню правой кнопки мыши для этого элемента панели задач.
Клавиша меню (рядом с правой клавишей CTRL) или SHIFT + F10
Выберите «открыть от имени администратора» с помощью клавиш со стрелками и введите.

@ chazt3n @SamHasler не нужно делать это жестко.
Если вы удерживаете Shift при открытии приложения, вы получаете вторую копию.
Если вы удерживаете Shift и Ctrl при открытии приложения, оно открывается с повышенными правами.
_Это верно как в меню «Пуск», так и в диалоговом окне «Выполнить» или на панели задач, независимо от того, открываете ли вы ее с помощью клавиатуры или щелкая ..._

Другими словами, перед нажатием 1 разомните весь угол клавиатуры: Ctrl + Shift + Win + 1 откроет новую копию с повышенными правами.

@Jaykul Когда я рассказываю людям о модификаторе волшебного лифта, они всегда говорят "чтотттт"

Я на самом деле работаю над подобным проектом и хотел бы сотрудничать со всеми, кто хочет помочь. К концу выходных у меня должен быть альфа-выпуск, который поддерживает CMD, powershell и WSL с функциональностью раскрывающегося списка.

Я заинтересован в расширении возможностей guake / yakuake и того, что они сделали, с некоторыми дополнительными идеями, такими как NOFUNEVER, описанные с возможностью одновременного использования нескольких мониторов, но я не уверен, как это будет выглядеть.

Он еще НЕ готов к тестированию, но к концу выходных у меня должен быть готов альфа-версия, если кто-то заинтересован в сотрудничестве, напишите мне на mwayne. [email protected]. Тот, кто хорошо разбирается в тематических приложениях и работает с элементами управления на C #, будет большим подспорьем.

https://github.com/usrcletus/winuake

Пожалуйста, будьте осторожны со мной, это супер грубые этапы, лол.

Хотел бы, чтобы эта функциональность появилась. Очень доволен тем, как работает Windows Terminal (это одно из немногих терминальных приложений Windows, которые не задыхаются и не умирают в тесте скорости "cmatrix"!). Пожалуйста, включите его (когда сможете :)), как только вы привыкнете к этой функции, вы не сможете без нее жить.

Эта функция очень экономит время.
Очень жду Windows Terminal 2.0

Очень популярная функция, которая действительно сделает переключение среды между Linux и Windows намного лучше.

Очень популярная функция, которая действительно сделает переключение среды между Linux и Windows намного лучше.

это потребует, чтобы некоторые эмуляторы терминала Linux имели все функции conemu, в Windows уже есть все

Команда выпустила дорожную карту, и эта проблема там 🥳 Хотя у нее приоритет 3 по шкале от 0 до 2 😢

Извините, наша шкала действительно до 3. Упс! :улыбка:

Тем не менее кажется, что эти проблемы могут не попасть даже в релиз через год. Очень плохо. Я очень хотел использовать новый терминал, но без функции горячих клавиш он слишком громоздкий по сравнению с guake в Linux.

По крайней мере, счастлив, что он попал в список. :) - WSL2 Docker сделал Windows более выполнимым повседневным драйвером, эта функция просто продвинет его дальше, когда он появится.

Я согласен с тем, что это удобная функция, и она мне действительно понадобится, если я буду использовать Windows.
Однако все упомянутые функции должны выполняться оконным менеджером, а не терминалом.

Технически это было бы оптимально, если бы WM позволяла это, вы могли бы легко обрабатывать все и каждое окно, но вряд ли мы получим это в ближайшее время. Лучше всего добавить это в PowerToys.

Не обязательно. Это просто означает, что сотрудники Microsoft не будут над этим работать.
Кто угодно может представить эту функцию в качестве PR.

Если кому-то нужно очень простое решение AutoHotkey, см. Суть: https://gist.github.com/atruskie/99a498ac43b91deb91eab4069b6047b9

Это не точное решение, но оно выполняет свою работу без особых усилий.

#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://gist.github.com/atruskie/99a498ac43b91deb91eab4069b6047b9

Это не точное решение, но оно выполняет свою работу без особых усилий.

#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://gist.github.com/sharunkumar/af7ba56e3cce8238ae9c986c619e8d1c

этот переключается обратно в активное окно, в котором вы были до того, как переключились на 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

Я нашел этот репозиторий для простого приложения, которое добавляет Quake в терминал:
https://github.com/flyingpie/windows-terminal-quake

Достаточно хорошо работает для моих случаев использования.

Я обнаружил, что этого легко добиться с помощью диспетчера клавиатуры PowerToy и вышеупомянутого сочетания клавиш Windows Key + NUM для запуска приложения, закрепленного на панели задач. Просто прикрепите терминал Windows к панели задач (у меня позиция 6), а затем откройте инструмент PowerToys Keyboard Manager. Я использовал WIN + ` с Cmder, поэтому _remapped_ ярлык WIN + ` на WIN + 6 . Теперь, когда я выполняю WIN + ` терминал Windows выйдет на передний план или запустит новый экземпляр, если он еще не запущен (что даже лучше, чем то, что делает Cmder изначально).

image

нет это не то же самое
свернуть! = скрыть окно
скрытие окна позволяет полностью избавиться от вашего пути

Вы правы, это определенно не режим Quake - извините за путаницу. Я обнаружил эту проблему, просто ища способ, чтобы пользовательский глобальный ярлык выводил Терминал на передний план, что было для меня нарушением сделки, поскольку я привык к такому поведению от Cmder. Лично я не чувствовал необходимости в режиме Quake, поэтому это сокращенное решение заполнило пробел, и я подумал, что пропущу его.

Это самый популярный запрос функции, который был открыт уже более года ??

Как, черт возьми, это еще не реализовано?

Привет, я просто публикую здесь некоторые исследовательские заметки, потому что не хочу их потерять.

RegisterHotKey , похоже, ничего не сделал в моих экспериментах. Может я делал не так? Может быть, остров XAML съедает сообщение WM_HOTKEY до того, как дойдет до нашего wndproc? В любом случае, похоже, нет никаких отзывов об этой функции, поэтому я не уверен, насколько она полезна в «многоэкземплярном режиме».

SendMessage(_window.get(), WM_SETHOTKEY, VK_OEM_3, 0) действительно _дал_ работу. Он даже возвращает 2 если есть другое окно с уже установленной горячей клавишей, что приятно. Это сделает все за нас - когда клавиша нажата _в любом месте_ в системе, оно активирует окно терминала, даже если оно свернуто. Не уверен в том, что «свернуто на панель задач», но прогресс есть прогресс.

К сожалению, нетривиально заставить второе окно терминала ждать закрытия первого окна, а затем нажимать горячую клавишу. Плюс, кто получает горячую клавишу, если открыто 3 окна WT? Итак, прямо сейчас только первое окно получит назначенную ему горячую клавишу, а затем все последующие созданные окна _ не смогут_ получить назначенную им горячую клавишу, пока первое окно не будет закрыто. Затем _следующее созданное окно WT_ получит горячую клавишу. Это конечно неловко.

Перезагрузка настроек, вероятно, также приведет к тому, что в окне _random_ WT будет назначена горячая клавиша.

В этой ветке есть множество вопросов, поэтому я попытаюсь обобщить их, но пока не предлагаю целостное решение.

  • Нажмите горячую клавишу в любом месте, чтобы активировать одно окно терминала, где бы оно ни находилось (требуется режим единственного экземпляра, а также глобальная поддержка горячих клавиш)
  • Нажмите горячую клавишу в любом месте, чтобы активировать одно окно Терминала _на текущем мониторе_. Если его раньше не было на этом мониторе, переместите его туда. (требуется режим единственного экземпляра, а также глобальная поддержка горячих клавиш)
  • Нажмите горячую клавишу, чтобы активировать «ближайшее» окно терминала. (Для этого, вероятно, потребуется какой-то IPC, вроде того, над чем работает # 5000)
  • Сверните в трей, нажмите горячую клавишу, чтобы активировать одно окно терминала / ближайшее окно терминала (# 5727)
  • Терминал не отображается в представлении alt + tab, нажмите горячую клавишу, чтобы активировать одно окно терминала / ближайшее окно терминала (я не уверен, что это отличается от приведенного выше
  • когда Терминал вызывается с помощью горячей клавиши, пусть он "скользит" сверху (не уверен, возможно ли это с помощью метода SendMessage(WM_SETHOTKEY) выше).

    • Точно выдвинуть на деактивировать?

Вау, я уверен, что пропустил некоторые из сценариев, описанных в 95 комментариях к этой ветке, но это уже беспорядок настроек.


РЕДАКТИРОВАТЬ 17 августа 2020: Ой, вот как PowerToys подключает клавиатуру для глобальных сообщений, давайте просто сделаем это.
https://github.com/microsoft/PowerToys/blob/49b56d9b52bdfedd6ad1404bd0b20e884d2b574b/src/modules/shortcut_guide/shortcut_guide.cpp#L150 -L173

По моему скромному мнению, сворачивание в трей - это совсем другая функция.

Наличие нескольких экземпляров и вызов разных экземпляров на разных дисплеях звучит как что-то для второй итерации этой функции.

Я думаю, что было бы лучше сначала сконцентрироваться на более простых сценариях, например, вызов одного экземпляра с помощью нажатия горячей клавиши и выдвижения с помощью той же горячей клавиши. Если есть несколько экземпляров, вероятно, должно быть правило, которое вызывается, а затем

IMO, поскольку WT имеет несколько вкладок, лучший сценарий - это один экземпляр, и его вызывают там, где находится мышь, если есть несколько виртуальных рабочих столов или мониторов. Как Guake.

Привет @ zadjii-msft - Я тоже смотрел на некоторые похожие области, и я хотел консолидировать исследование, а также поделиться некоторыми мыслями о реализации. Читая материалы, я не мог быть уверен, что я упустил из виду, где команда рассматривала способы использования функций UAP / UWP, которые могут быть актуальными, так что, надеюсь, это еще не проторенная почва!

Во-первых, регистрация горячей клавиши. Я обнаружил, что проведенное вами исследование WM_HOTKEY дополняет описанный здесь маршрут регистрации горячих клавиш UWP. Вы уже рассматривали этот подход? Я подумал, что это может быть хороший подход, поскольку контекстное меню проводника «запускать терминал Windows здесь» уже реализовано, устраняя необходимость в создании / тестировании AppService / IPC (# 5000), поскольку мы могли бы просто расширить и улучшить то, что уже есть .

Копаясь в этом, я натолкнулся на этот, возможно, соответствующий SO-ответ, описывающий подход, который подключается к Windows.UI.Core.CoreDispatcher.AcceleratorKeyActivated, чтобы получать уведомления при нажатии специальных комбинаций клавиш, например CTRL+~ . Это может быть применимо?

Кстати о модели процесса ...

К сожалению, нетривиально заставить второе окно терминала ждать закрытия первого окна, а затем нажимать горячую клавишу. Плюс, кто получает горячую клавишу, если открыто 3 окна WT? Итак, прямо сейчас только первое окно получит назначенную ему горячую клавишу, а затем все последующие созданные окна _ не смогут_ получить назначенную им горячую клавишу, пока первое окно не будет закрыто. Затем _следующее созданное окно WT_ получит горячую клавишу. Это конечно неловко.
Перезагрузка настроек, вероятно, также приведет к тому, что в окне _random_ WT будет назначена горячая клавиша.

У этих проблем есть общая нить, которая, если ее вырвать из уравнения, делает вещи более ясными и простыми. Этой общей нитью являются логика и сложность управления экземплярами wt - я думаю, что большая часть остального является следствием этой основной проблемы. Как и многие другие задачи, эту задачу лучше всего решить, разбив ее на более мелкие задачи. Здесь, я думаю, введение посредника избавляет WT от необходимости знать что-либо об управлении экземпляром, не говоря уже об обработке глобальной (например, приложение не в фокусе) регистрации и привязки горячих клавиш. Мне это нравится с точки зрения SRP, и мне кажется, что работа по обеспечению контекстного меню проводника «Запуск Windows Terminal Here» согласуется с этим концептуально, если не на самом деле. TriggerEvent расширений рабочего стола UWP может использоваться службами IPC для передачи сериализованных действий (команд) запущенным экземплярам wt или анализироваться и передаваться в качестве аргументов запуска для новых процессов wt.

Процесс, обрабатывающий глобальную горячую клавишу, будет одновременно и приложением на панели задач _, и процессом с одним экземпляром (вероятно, приложением WinForms), который содержит компонент NotifyIcon вместе с контекстным меню значка на панели задач и компонентами диспетчера. Это имеет положительный побочный эффект, поскольку избавляет от необходимости добавлять много новых и сложных настроек + логики в кодовую базу WT, поскольку wt не нужно ничего знать о так называемом "режиме землетрясения": smile :. Приложение systray будет источником / репозиторием для этих типов настроек, и я думаю, что оно будет абсолютно работать и извлекать выгоду из # 7170

  • Нажмите горячую клавишу в любом месте, чтобы активировать одно окно терминала, где бы оно ни находилось (требуется режим единственного экземпляра, а также глобальная поддержка горячих клавиш)

Контекстное меню приложения на панели задач может иметь всплывающее меню, которое отображает список профилей wt, которые пользователи могут щелкнуть, чтобы выбрать профиль для использования при вызове «в стиле Quake Mode». По умолчанию может использоваться первый в списке профиль, если он не указан. Если есть планы / спецификации для реализации внутренней логики для получения списков профилей и их деталей, дизайн выиграет от возможности использования вне процесса wt.exe (например, приложение notifyicon не должно дублировать функциональность чтобы загрузить список профилей и тому подобное, если это вообще возможно). Поскольку приложение systray управляет экземплярами, wt не обязательно должен реализовывать сам режим единственного экземпляра. Репозитории PowerToys показывают отклонения IPC UWP в манифесте и, вероятно,

Подытоживая и без того насыщенный информацией пост:

Если подумать, большинство обозначенных в списке проблем исчезают или значительно смягчаются с помощью этого подхода. Когда я делаю шаг назад и смотрю на все в целом, я чувствую, что эта функция ближе к реальности, чем мы думали!

  • Нажмите горячую клавишу в любом месте, чтобы активировать одно окно Терминала _на текущем мониторе_. Если его раньше не было на этом мониторе, переместите его туда. (требуется режим единственного экземпляра, а также глобальная поддержка горячих клавиш)
  • Нажмите горячую клавишу, чтобы активировать «ближайшее» окно терминала. (Для этого, вероятно, потребуется какой-то 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. Я думаю, что это было бы хорошим обходным решением до официальной реализации.

https://github.com/Inndy/TerminalSummoner

Я изменил решение autohotkey с https://github.com/ehpc/quake-windows-bash для улучшения взаимодействия с пользователем. Я не изучал решение @Inndy , так что может быть лучше.

Мой скрипт находится здесь: https://github.com/rengler33/dotfiles/blob/master/C/Users/Rub/wt-quake-like.ahk

Используя горячую клавишу Ctrl + `

  1. Если оконный терминал не запущен, он запускает его *
  2. Если он запущен, но свернут, он восстанавливается
  3. Если он активен, он сворачивается
  4. В противном случае (то есть он восстановлен, но не в фокусе) сфокусируйте его

* Примечание: этот скрипт также использует ярлык Windows, который мне нравится использовать, который добавляет несколько параметров при открытии
https://github.com/rengler33/dotfiles/blob/master/C/Users/Rub/wt.exe.lnk
Но его можно заменить, просто запустив BashHandle вместо Shortcut

Я изменил решение autohotkey с https://github.com/ehpc/quake-windows-bash

Спасибо за это.

Я вдохновился сценарием @rengler33 и внес некоторые изменения в свою собственную настройку с тремя экранами:
https://gist.github.com/oryon-dominik/562970f77f2ad4d9bd57bea58ddc8ef5
Скрипт запускает Windows-Терминал на активном экране. (CTRL + CIRCUMFLEX)
Плохая анимация и небольшое мерцание, так что это скорее обходной путь.

Я очень хочу, чтобы эта функция была официально реализована ..

Я также хотел переключиться с ConEmu на Windows Terminal, но мне тоже не хватало стиля Quake. Если кому-то интересно - я создал небольшое приложение, которое хранит и извлекает окно терминала Windows (вы можете добавить другие приложения, чтобы иметь этот стиль Quake, если хотите).

Проверьте мое репо и все функции здесь: https://github.com/rzym-on/termial-tray

Я очень надеюсь, что эта функция когда-нибудь появится по умолчанию. А пока не стесняйтесь использовать мое маленькое решение.

Я также хотел переключиться с ConEmu на Windows Terminal, но мне тоже не хватало стиля Quake. Если кому-то интересно - я создал небольшое приложение, которое хранит и извлекает окно терминала Windows (вы можете добавить другие приложения, чтобы иметь этот стиль Quake, если хотите).

Проверьте мое репо и все функции здесь: https://github.com/rzym-on/termial-tray

Я очень надеюсь, что эта функция когда-нибудь появится по умолчанию. А пока не стесняйтесь использовать мое маленькое решение.

Спасибо тебе за это. Есть ли способ настроить скорость анимации окна Терминала Windows .. так же, как это делает ConEmu?

@mkanet Я хотел бы перенаправить обсуждение чьего-либо проекта в их репозиторий и сосредоточить эту ветку на рассматриваемой проблеме. Благодаря!

Другая идея, это может быть параметр команды wt.exe, например: -T, --toggle
Если экземпляр терминала не существует, откройте новый
Иначе (если активен, свернуть Иначе восстановить / активировать)

Это похоже на логику AutoHotKey, приведенную выше, но внутри wt.exe и доступную для ярлыков .lnk / глобальных сопоставлений клавиш / панели задач Windows Win + Number и т. Д.

Было бы здорово, если бы для этого не понадобилось другое стороннее приложение. И еще я пристрастился к Ctrl + `

Была ли эта страница полезной?
0 / 5 - 0 рейтинги