ConEmu: Como chamar msys2 como aba?

6

Eu quero criar uma grade de console 2x2 e quero que seja minha configuração padrão, ou seja, quando eu abro o ConEmu, essa configuração é a configuração de inicialização. Eu escrevi uma tarefa como abaixo:

>* cmd -cur_console:n

*powershell -cur_console:s1TVn

cmd /A /Q /K "C:\dev\msys64\msys2_shell.bat" -cur_console:s1THn

ghci.exe -cur_console:s2THn

O problema está no último comando. Eu quero iniciar msys2 , mas quando eu executo minha tarefa, para a terceira linha, eu obtenho um console, mas ele não roda dentro do ConEmu, ele o abre como uma janela separada. Como posso corrigir essa configuração?

Além disso, como posso definir essa configuração como padrão quando eu inicio o ConEmu, enquanto agora, quando eu inicio, eu só recebo um único console cmd.

    
por terett 10.01.2016 / 14:47

3 respostas

3

Olhe dentro de msys2_shell.bat para obter a resposta. Esse lote executa mintty em vez de shell bash. Sem utilidade. Altere a terceira linha para o caminho completo para bash.exe -l -i .

how can I set this configuration as the default one when I start ConEmu

Existe uma página de configurações de "Inicialização" no ConEmu, não é?

    
por 10.01.2016 / 15:01
11

Eu também tive problemas para fazer com que os shells MSYS2, MinGW32 e MinGW64 (v2016-12-07) funcionassem no ConEmu v161206.

A única solução de trabalho (semi-portátil) que encontrei é a seguinte.

  1. Crie uma nova tarefa com o nome {Shells::mingw-64} e os seguintes comandos no ConEmu para o shell MinGW64:

    set MSYSTEM=MINGW64 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Crie uma nova tarefa com o nome {Shells::mingw-32} e os seguintes comandos no ConEmu para o shell MinGW32:

    set MSYSTEM=MINGW32 & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Crie uma nova tarefa com o nome {Shells::msys2-64} e os seguintes comandos no ConEmu para o shell MSYS2:

    set MSYSTEM=MSYS & set MSYSCON=conemu64.exe & "%ConEmuDir%\..\..\..\msys64\usr\bin\bash.exe" --login -i -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

Atenção: Modifique os caminhos relativos acima para corresponder ao caminho para MSYS2 em seu sistema.

A solução é semi-portátil, uma vez que declara explicitamente o executável ConEmu (altere para ConEmu.exe para x86).

Não tenho certeza se o valor da variável de ambiente MSYSCON é importante. Eu só configurei isso por segurança, porque o arquivo em lote MSYS2 msys2_shell.cmd também o define.

Uma alternativa é usar o script em lote msys2_shell.cmd . Essa abordagem tem a enorme desvantagem de que o msys2_shell.cmd gera um novo processo por meio do comando START do Windows, portanto duas guias são adicionadas no ConEmu.

  1. Crie uma nova tarefa com o nome {Shells::mingw-64} e os seguintes comandos no ConEmu para o shell MinGW64:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Crie uma nova tarefa com o nome {Shells::mingw-32} e os seguintes comandos no ConEmu para o shell MinGW32:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Crie uma nova tarefa com o nome {Shells::msys2-64} e os seguintes comandos no ConEmu para o shell MSYS2:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -msys -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\msys2.exe"
    

O msys2_shell.cmd deve ser usado diretamente de um CMD.EXE , com ConEmu64.exe / ConEmu.exe no PATH :

msys2_shell -mingw64 -conemu

Esse comando abre uma nova guia MinGW64 no ConEmu.

tl; dr: Eu recomendo a primeira abordagem. Aqui está uma captura de tela como prova no ConEmu:

    
por 19.12.2016 / 13:45
6

O que fazer é realmente muito simples, uma vez que você descasque todas as camadas. Isso funciona bem como uma invocação (certifique-se de modificá-lo para o local de instalação específico do MSYS2):

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & "c:\msys64\usr\bin\bash.exe" --login -i

Eu pessoalmente recomendaria configurar o shell para herdar seu PATH:

set CHERE_INVOKING=1 & set MSYSTEM=MINGW64 & set MSYS2_PATH_TYPE=inherit & "c:\msys64\usr\bin\bash.exe" --login -i

A página de configurações do meu ConEmu Tasks acaba ficando assim:

Quebrandotudoabaixo

OMSYS2gostadeconfiguraroshelldeacordocomasvariáveisdeambiente,emvezdosparâmetrosdalinhadecomando.Passaropçõesparaumprogramadessamaneirapodeparecerpouconaturalnocomeço,masbasicamentesegueapenasessasériesimples:setVAR=value&setVAR2=value&"c:\path\to\command" [args]

  • CHERE_INVOKING - se definido como 1, o bash começa no diretório de trabalho atual, caso contrário, ele é iniciado no diretório inicial do usuário. Isso precisa ser definido como 1 para permitir que o shell funcione conforme o esperado no menu de contexto da Janela do Explorer.

  • MSYSTEM - qual sub-sistema MSYS2 deve ser usado. Existem três: MSYS, MINGW32 e MINGW64. O subsistema MSYS deve ser usado apenas para as operações do comando pacman e, por isso, normalmente só invoco isso por meio do ícone do menu Iniciar do old-skool, na ocasião em que é necessário. MINGW32 é inútil para todos por alguns usuários selecionados e você sabe quem já é, provavelmente.

  • MSYS2_PATH_TYPE - se o MSYS não configurado usar um ambiente PATH mínimo que contenha apenas binários MSYS e alguns caminhos de sistema do Windows e é um modo obrigatório para MSYSTEM=MSYS shell somente . Para MINGW shells, é recomendado usar inherit - Eu tenho usado MSYS2_PATH_TYPE=inherit sem problemas há anos.

Existe outra variável MSYSCON mencionada por outra resposta e referenciada em msys2_shell.cmd - ignore-a. É somente para uso dentro do arquivo de lote msys2_shell.cmd e não tem qualquer influência sobre o comportamento da inicialização do shell bash.exe ou MSYS.

Local de instalação do MSYS2

O caminho MSYS2 foi intencionalmente codificado como c:\msys64\ , pois esse é o local de instalação padrão do instalador do MSYS2 Windows. Não faz sentido, neste caso, usar %ConEmuDir% , já que é relativo a %PROGRAMFILES% , e MSYS2 é mais tipicamente instalado em relação ao diretório raiz do disco rígido. Note que faz sentido usar %ConEmuDir% ao referenciar o shell MSYS2 que vem com o Git para Windows , já que é instalado em relação a %PROGRAMFILES% .

Não existe uma maneira fácil de saber o local de instalação do MSYS2. Não há nenhuma variável de ambiente configurada pelo MSYS2, tanto quanto eu gostaria que houvesse. Não seria ótimo se o MSYS2 tivesse uma opção para exportar algo que dependesse de MSYSTEM_HOME para o ambiente de sua máquina? Mas isso não acontece, então é inteiramente de você, como usuário, saber onde está instalado e apontar o ConEmu para lá.

Em relação a msys2_shell.cmd :

Não use. O arquivo em lotes é incorretamente nomeado. Ele deve ser chamado de msys2_terminal.cmd ou similar, pois o que está realmente fazendo é configurar um terminal inteiro para o shell . Este é um erro comum de terminologia, especialmente em sistemas operacionais Windows, onde nunca houve uma separação clara entre terminal do shell . Veja como isso funciona, explicado a partir de uma perspectiva do usuário do Windows:

  • Shell - este é o processador de comandos e o runner de lote / script. É essencialmente um aplicativo de linha de comando muito parecido com qualquer outro aplicativo de linha de comando. Um shell não requer sequer nenhuma janela visível ou conexões de teclado. Ele pode operar inteiramente em segundo plano em arquivos, fluxos ou outras fontes de entrada / saída de dados.

  • Terminal - este é um aplicativo em janelas que fornece uma interface de teclado / mouse para o programa shell . No Windows, ela é geralmente chamada de Janela do Console . Os comandos do teclado são canalizados para o programa shell e a saída é exibida dentro da janela com barras de rolagem, texto colorido e outros recursos divertidos.

Neste cenário, quero que meu terminal seja ConEmu e meu shell seja BASH (mingw64) . Portanto, quero que ConEmu inicie o shell e somente o shell. Não quero que o ConEmu inicie mintty . Esses são dois terminais e isso nos levaria a obter janelas pop-up secundárias - uma para o ConEmu e outra para o mintty. Mas é exatamente isso que tentar executar o msys2_shell.cmd será suficiente. Então não use isso.

    
por 21.02.2018 / 18:08

Tags