Программное открытие терминала Windows в определенной папке — веб-журнал Рика Страла

На этой странице:

Редактировать это сообщение

I ‘ Я использую Терминал Windows некоторое время с тех пор, как он был объявлен и стал доступным в Магазине Windows несколько месяцев назад.

Этот новый Терминал может понравиться множеству причин, и я не хочу вдаваться в подробности здесь. Для меня основная причина в том, что он поставляется с новым ConHost.exe , который значительно быстрее, чем ConHost, поставляемый с Windows, что приводит к гораздо более быстрой отрисовке и прокрутке терминала.

Имейте в виду, что терминал Windows — это пользовательский интерфейс терминала, плюс хост консоли, и он не заменяет оболочки Powershell, CMD или Bash или любую другую оболочку. Терминал действует как хост для тех оболочек, которые загружаются в него. Любое приложение оболочки использует ConHost, а пользовательский интерфейс терминала предоставляет пользовательский интерфейс хоста для этих экземпляров оболочки.

Несколько причин проверить это:

  • Несколько вкладок экземпляров оболочки
  • Очень быстрая отрисовка текста
  • Плавное масштабирование текста
  • Лучшее соответствие спецификации терминала
  • Открытый исходный код на GitHub и в стадии активной разработки.
  • Ожидается много улучшений…

Если вы еще этого не сделали, попробуйте…

Автоматизации пока нет

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

Чтобы упростить загрузку, Microsoft предоставляет глобальный сопоставленный исполняемый файл — wt.exe — который можно запустить без указания пути из любого места в вашей системе: из Windows-R , из другой консоли или из другой приложение, использующее CreateProcess () связанные API.

Вы можете запустить Терминал Windows из любого места с помощью:

  wt  .exe  

или с помощью установленного ярлыка.

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

Недавно несколько человек спрашивали о Терминале Windows в Markdown Monster:

Как мне запустить Терминал Windows в качестве средства просмотра терминала в Markdown Monster

Короткий ответ:

  • Вы можете настроить профиль оболочки терминала по умолчанию при запуске.
  • Установить "startDirectory": "% __ CD __%"
    , запускающий командную консоль из активной папки ОС.
  • Побочный эффект: запуск ярлыка Windows запускается из Системная папка

Для получения дополнительной информации прочтите.

Markdown Monster и терминалы

Markdown Monster имеет параметры конфигурации, которые позволяют вы настраиваете исполняемый файл терминала и аргументы команд, чтобы вы могли настроить запускаемый терминал. По умолчанию используется Powershell, но легко добавить командную строку для переключения Cmd.exe , WSL или другой версии Bash. В программе запуск терминала осуществляется через пункты контекстного меню из различных операций с папками:

MM делает это из нескольких мест:

  • Из вкладки текущего документа или документа
  • Из папки Папка браузера
  • Из файла или папки в браузере папок
  • Из диалога фиксации Git

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

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

Например, для терминала Powershell по умолчанию значение по умолчанию:

  powershell.exe -NoExit -Command "& cd '{0}'"  

Поскольку терминал Windows работает Если это хост оболочки, а не фактическая оболочка, вы не можете передавать параметры напрямую оболочке. wt.exe в настоящее время не имеет параметров командной строки (AFAIK), поэтому нет способа установить рабочую папку или отправить команду в запущенную оболочку.

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

Все равно автоматизировать

Для программного запуска Windows Terminal я могу использовать следующий код:

  var pi = new ProcessStartInfo {FileName  = "wt.exe", WorkingDirectory = "c: \ temp", UseShellExecute = false}; Process.Start (pi);  

и это работает, за исключением того, что не удается загрузить из WorkingDirectory .

Проблема с этим подходом заключается в том, что вы получаете только конфигурацию по умолчанию, а папка — даже если она установлена ​​через WorkingDirectory в начальной информации — полностью игнорируется при запуске wt.exe из-за настройки профиля по умолчанию. Хмф!

Профили терминала Windows

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

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

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

Вы можете получить доступ к файлу JSON профиля Windows Terminal, перейдя в Настройки в самом Терминале с помощью кнопки вниз:

Если вы отредактируете этот файл, вы обнаружите:

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

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

Форсирование пути запуска

Итак, в Markdown Monster я бы люблю использовать W indows Terminal, и после небольшого безуспешного поиска параметров командной строки я опубликовал сообщение в Twitter с вопросом, получил ли кто-нибудь этот запускающий WT в определенной папке для работы.

@ChristofJans в итоге помог меня нет:

Вот соответствующие ключи:

  "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", ... "profiles": [{"commandline": "powershell.exe", "  guid ":" {61c54bbd-c2c6-5271-96e7-009a87ff44bf} "," name ":" Windows PowerShell "," startDirectory ":"% USERPROFILE% ",}, {...}]  

Суть в том, что по умолчанию все профили настроены с жестко заданным параметром startDirectory для профиля пользователя

  "startDirectory": "% USERPROFILE%", " 

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

   "startDirectory": "% __ CD __%"  

И вуаля WT теперь открывается по указанному пути, если вы предварительно задали путь или предоставили WorkingDirectory для API CreateProcess.

Побочные эффекты

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

Это не идеально, но Я могу жить с этим. Легко cd ~ .

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

Идеальным решением здесь было бы для WT.exe , чтобы предоставить способ выбора профиля для вызова, затем настройте собственный профиль, который не является профилем по умолчанию, и добавьте туда путь % __ CD __% , который предоставит функции, необходимые для приложений, оставляя профиль по умолчанию нетронутым.

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

Использование Windows Terminal в качестве внешнего инструмента в Visual Studio

Итак, с тем, что вы знаете сейчас, вы также можете установить Windows Terminal в качестве внешнего инструмента в других приложениях, таких как Visu Например, внешние инструменты al Studio. Мне нравится иметь быстрый способ открыть терминал в папке текущего выбранного элемента. Это можно сделать в Visual Studio Инструменты → Внешние инструменты… :

Обратите внимание, что это немного запутано, потому что Visual Studio использует необработанный CreateProcess () без выполнения оболочки и поэтому не может загрузить псевдо wt.exe процесс. Таким образом, вместо этого запускается оболочка CMD и команда START , которая действительно использует команды оболочки, для запуска Терминала Windows через WT команда. Уродливо, потому что он ненадолго мигает в окне CMD , но в остальном работает.

Помните, что вам нужен каталог по умолчанию для профиля по умолчанию, установленный на "startDirectory": "% __ CD __%" для запуска из базовой папки, а не из какого-либо другого жестко заданного пути.

Резюме

Хорошие новости заключается в том, что со значением startDirectory , установленным в профиле по умолчанию, вы можете заставить Windows Terminal запускаться из папки по вашему выбору. Это позволяет использовать терминал Windows из Visual Studio, а также из Markdown Monster:

и теперь он отлично работает!

Пользоваться терминалом очень приятно, поэтому я в первую очередь возился со всем этим. Я выполняю запрос, который получил ранее, потому что — черт возьми — я тоже хочу использовать Windows Terminal в MM 😃. И теперь я могу…

этот пост создан и опубликован с помощью Markdown Monster

Другие сообщения, которые могут вам также понравиться

  • Создание промежуточного программного обеспечения Live Reload Компонент для ASP.NET Core
  • Принятие необработанного содержимого тела запроса в контроллерах API ASP.NET Core
  • Добавление минимальной аутентификации OWIN Identity к существующему приложению ASP.NET MVC
  • Элемент управления Chromium WebView2 и взаимодействие .NET с JavaScript — Часть 2
Оцените статью
techsly.ru
Добавить комментарий