ConEmu: ¿Cómo llamar a msys2 como pestaña?

6

Quiero crear una cuadrícula de consola 2x2, y quiero que sea mi configuración predeterminada, es decir, cuando abro ConEmu, esta configuración es la configuración de inicio. He escrito una tarea como la siguiente:

& gt; * 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

El problema está con el último comando. Quiero comenzar msys2, pero cuando ejecuto mi tarea, para la tercera línea, obtengo una consola, pero no se ejecuta dentro de ConEmu, la abre como una ventana separada. ¿Cómo puedo arreglar esta configuración?

Además, ¿cómo puedo configurar esta configuración como la predeterminada cuando inicio ConEmu, mientras que ahora cuando lo inicio, solo obtengo una única consola cmd?

terett
fuente

Respuestas:

3

Mirar dentro msys2_shell.bat para obtener la respuesta. Este lote se ejecuta mintty en lugar de shell bash. Inútil. Cambiar la tercera línea a la ruta completa a bash.exe -l -i.

¿Cómo puedo configurar esta configuración como la predeterminada cuando inicio ConEmu?

Hay una página de configuración de "Inicio" en ConEmu, ¿no es así?

Maximus
fuente
tipo de respuesta inútil, ¿no?
Evgeny Bobkin
11

También tuve problemas para conseguir que los shells MSYS2, MinGW32 y MinGW64 (v2016-12-07) funcionen en ConEmu v161206.

La única solución de trabajo (medio portátil) que he encontrado es la siguiente.

  1. Crea una nueva tarea con el nombre. {Shells::mingw-64} y los siguientes comandos en ConEmu para el 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. Crea una nueva tarea con el nombre. {Shells::mingw-32} y los siguientes comandos en ConEmu para el 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. Crea una nueva tarea con el nombre. {Shells::msys2-64} y los siguientes comandos en ConEmu para el shell MSYS2:

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

Atención: Modifique las rutas relativas de arriba para que coincidan con la ruta a MSYS2 en su sistema.

La solución es semi-portátil, ya que establece explícitamente el ejecutable de ConEmu (cámbielo a ConEmu.exe para x86).

No estoy seguro de si el valor de la MSYSCON La variable de entorno importa. Solo lo he configurado para la seguridad, porque el archivo por lotes MSYS2 msys2_shell.cmd también lo establece.

Una alternativa es utilizar el msys2_shell.cmd script por lotes. Este enfoque tiene la gran desventaja de que el msys2_shell.cmd genera un nuevo proceso a través de Windows START comando, por lo tanto, se agregan dos pestañas en ConEmu.

  1. Crea una nueva tarea con el nombre. {Shells::mingw-64} y los siguientes comandos en ConEmu para el shell MinGW64:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw64 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe"
    
  2. Crea una nueva tarea con el nombre. {Shells::mingw-32} y los siguientes comandos en ConEmu para el shell MinGW32:

    "%ConEmuDir%\..\..\..\msys64\msys2_shell.cmd" -mingw32 -conemu -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw32.exe"
    
  3. Crea una nueva tarea con el nombre. {Shells::msys2-64} y los siguientes comandos en ConEmu para el shell MSYS2:

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

los msys2_shell.cmd está destinado a ser utilizado directamente desde una CMD.EXE, con ConEmu64.exe / ConEmu.exe en el PATH:

msys2_shell -mingw64 -conemu

Ese comando abre una nueva pestaña de MinGW64 en ConEmu.

tl; dr: Recomiendo el primer acercamiento. Aquí hay una captura de pantalla como prueba en ConEmu:

Working MSYS2 MinGW64 shell in ConEmu

Florian Wolters
fuente
Esta respuesta está bien pero es mucho más complicada de lo que se requiere. los -new_console:C:"%ConEmuDir%\..\..\..\msys64\mingw64.exe" La parte no es necesaria, entre otras cosas.
jstine
6

Lo que hay que hacer es bastante simple, una vez que pelas todas las capas. Esto funciona bien como una invocación (asegúrese de modificarlo a su ubicación específica de instalación de MSYS2):

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

Personalmente recomendaría configurar el shell para heredar su RUTA:

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

La página de configuración de Mis tareas ConEmu termina pareciéndose a esto: ConEmu Startup::Tasks Page

Romper todo hacia abajo

A MSYS2 le gusta configurar el shell de acuerdo con las variables de entorno en lugar de los parámetros de la línea de comandos. Pasar opciones a un programa de esa manera puede parecer poco natural al principio, pero básicamente sigue esta serie simple: set VAR=value & set VAR2=value & "c:\path\to\command" [args]

  • CHERE_INVOKING - si se establece en 1, bash se inicia en el directorio de trabajo actual, de lo contrario se inicia en el directorio de inicio del usuario. Esto debe ser configurado para 1 para permitir que el shell funcione como se espera desde el menú contextual de la ventana del Explorador.

  • MSYSTEM - Qué subsistema MSYS2 utilizar. Hay tres: MSYS, MINGW32 y MINGW64. los MSYS El subsistema solo debe ser usado para pacman operaciones de comando y, por lo tanto, normalmente solo invoco eso a través del icono del menú de inicio de skool antiguo en las raras ocasiones en que se necesita. MINGW32 es inútil para todos por unos pocos usuarios seleccionados y usted sabe quién es usted, probablemente.

  • MSYS2_PATH_TYPE - Si unset MSYS usa un mínimo PATH entorno que contiene solo binarios de MSYS y un par selecciona rutas de Windows, y es un modo requerido para MSYSTEM=MSYS cáscara solamente . por MINGW se recomienda usar conchas inherit - He estado usando MSYS2_PATH_TYPE=inherit Sin problemas desde hace años.

Hay otra variable MSYSCON mencionado por otra respuesta y referenciado en msys2_shell.cmd -- ignoralo. Es solo para uso dentro de la msys2_shell.cmd archivo por lotes y no guarda relación con el comportamiento de bash.exe o la inicialización del shell MSYS.

Ubicación de instalación de MSYS2

La ruta MSYS2 ha sido intencionalmente codificada como c:\msys64\ ya que esa es la ubicación de instalación predeterminada para el instalador de Windows MSYS2. No tiene sentido en este caso usar %ConEmuDir% ya que eso es relativo a %PROGRAMFILES%, y MSYS2 se instala más típicamente en relación con el directorio raíz del disco duro. Nota que hace tiene sentido usar %ConEmuDir% cuando se hace referencia al shell MSYS2 que viene con Git para Windows , desde eso es instalado en relación con %PROGRAMFILES%.

No hay una manera fácil de saber la ubicación de instalación de MSYS2. Tampoco hay una variable de entorno configurada por MSYS2, por mucho que me gustaría. ¿No estaría bien si MSYS2 tuviera la opción de exportar algo? MSYSTEM_HOME en el entorno de su máquina? Pero no es así, por lo que, como usuario, es totalmente suyo saber dónde está instalado y apuntar a ConEmu allí.

Respecto a msys2_shell.cmd :

No lo uses El archivo por lotes se nombra incorrectamente. Deberia llamarse msys2_terminal.cmd o similar, ya que lo que realmente está haciendo es una configurando un terminal completo para el shell . Este es un error de terminología común, especialmente en los sistemas operativos Windows donde nunca ha habido una separación clara de terminal desde cáscara . Así es como funciona, explicado desde una perspectiva de usuario de Windows:

  • Cáscara - Este es el procesador de comandos y el batch / script runner. Es esencialmente una aplicación de línea de comandos muy similar a cualquier otra aplicación de línea de comandos. Un shell ni siquiera requiere ninguna conexión de ventana o teclado visible. Puede operar completamente en segundo plano en archivos, transmisiones u otras fuentes de entrada / salida de datos.

  • Terminal - esto es un aplicación de ventana que proporciona una interfaz de teclado / ratón a la programa shell . En las ventanas, a menudo se la denomina Ventana de consola . Los comandos del teclado se canalizan al programa shell, y la salida se muestra dentro de la ventana con barras de desplazamiento, texto en color y otras funciones divertidas.

En este escenario, quiero que mi terminal sea ConEmu y mi concha de ser BASH (mingw64) . Por eso quiero ConEmu para iniciar el shell y solamente la cáscara. No quiero ConEmu para comenzar menta . Esos son ambos terminales y eso nos haría tener ventanas emergentes secundarias, una para ConEmu y otra para menta. Pero eso es exactamente lo que intenta correr. msys2_shell.cmd haré Así que no lo uses.

jstine
fuente