Instalar zsh en Windows con “oh my zsh” y enlace en menús contextuales utilizando cygwin
Posh-git mola pero si, como yo, sois algo amantes de linux y encima habéis probado zsh sabréis que zsh mola mucho más.
Podemos instalar zsh en windows utilizando cygwin de manera bastante sencilla y con un par de cambios en el registro de windows tendremos un enlace en el menú contextual para abrir zsh en cualquier directorio rápidamente.
Antes de empezar tenéis que tener en cuenta lo siguiente: a la hora de crear el enlace del menú contextual hay que crear dos entradas en el registro de windows, una para cuando hacemos clic derecho sobre un directorio seleccionado (accederemos a dicho directorio) y la otra para cuando hacemos clic derecho sin tener un directorio seleccionado (accederemos al directorio actual).
¿Porqué os digo esto? Porque para poder crear la primera entrada en el registro (hacer clic derecho sobre un directorio seleccionado) sólo podemos hacerlo si instalamos la versión de cygwin de 32 bits ya que no hay manera de hacerlo si no es con el paquete chere
.
Es decir que si no queréis dicha opción del menú contextual podéis optar por descargar la versión de 64 bits en lugar de la de 32, aunque no os lo recomiendo ya que yo no he logrado hacer funcionar del todo bien lo del menú contextual en dicha versión (y el tutorial está enfocado a la versión de 32 bits, vamos que me limpio las manos con la de 64). Chere ya está disponible para 64 bits así que no tendréis problema si lo hacéis con el instalador de x64.
Descargad cygwin e instalad con normalidad (siguiente, siguiente…) hasta que lleguéis al listado de paquetes a instalar.
Cuando lleguéis al listado utilizad el buscador y marcad para descargar los siguientes paquetes:
- chere necesario para poder abrir la ubicación del directorio seleccionado. Ubicado en «Shells». No es necesario que la instaléis si no queréis abrir el menú contextual al hacer clic derecho sobre un directorio.
- zsh ubicado en «Shells».
- curl o wget cualquiera nos servirá para instalar oh-my-zsh. Ambos ubicados en «Web».
- git necesario para instalar oh-my-zsh. Ubicado en «Devel».
- ncurses necesario desde cygwin 1.7, ya que no viene incluido con el sistema base. Este paquete tiene ejecutables de sistema necesarios por el instalador de oh-my-zsh.
Y terminad la instalación (siguiente, siguiente…).
Ahora vamos a instalar oh-my-zsh. Para ello abrid una consola de cygwin. Si durante la instalación desmarcasteis el checkbox para añadir el acceso directo podéis ejecutar la consola accediendo a la carpeta de instalación de cygwin y ejecutando el fichero Cygwin.bat
.
En la consola ejecutad lo siguiente:
# Si hemos instalado curl curl -L https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh | sh # Si hemos instalado wget wget --no-check-certificate https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O - | sh
Esto instalará oh-my-zsh en vuestro directorio $HOME
de cygwin (exactamente igual que en linux).
Ahora que tenemos oh-my-zsh instalado pondremos zsh como la consola por defecto para nuestro usuario.
Para ello hay que modificar el fichero /etc/passwd
. Podéis hacerlo con vuestro editor favorito (a.k.a. sublime text, geany, notepad++…) accediendo al directorio de instalación de cygwin/etc y modificando el fichero passwd o si lo preferís podéis hacerlo mediante la propia consola de cygwin, utilizando el editor vi:
vi /etc/passwd
Buscáis vuestro usuario y al final de la línea substituís /bin/bash
por /bin/zsh
.
Si ejecutáis de nuevo el terminal de cygwin debería mostraros una consola de zsh como esta:
Ojo: Si habéis ejecutado la consola utilizando Cygwin.bat
tendréis que modificar dicho fichero antes de ejecutarlo para modificar ahí el terminal por defecto, ya que éste fichero ignora la configuración en /etc/passwd
. Para ello, editadlo y reemplazad bash
por zsh
, dejándolo así:
@echo off C: chdir C:\cygwin\bin zsh --login -i
Ya tenemos zsh instalado y corriendo como si de una instalación de linux se tratara. Podemos modificar el fichero .zshrc
para cambiar opciones como el tema o los plugins que zsh debería cargar al iniciar. A mi me gusta especialmente el tema racotecnic:af-magic
Bien, ahora que tenemos el terminal configurado es hora de añadir el acceso directo en nuestro menú contextual.
Si habéis instalado cygwin en la raíz de C:\ podéis descargar este fichero para instalar rápidamente el acceso directo del menú contextual. Ojo que está en catalán así que si queréis cambiarlo tendréis que abrirlo con un editor de texto y cambiar el «Obre zsh» por «Abrir zsh».
Si queréis ver paso por paso cómo he creado el acceso directo en el menú contextual seguid los pasos que os describo a continuación. En caso contrario, ya habéis terminado de instalar zsh con oh-my-zsh en windows :D.
— Para los curiosos
Ejecutad el editor de registro de windows (windows + R y luego regedit
) y desplegad el primer registro HKEY_CLASSES_ROOT
.
En él buscad el subregistro Directory
. De aquí nos interesan dos registros: Background
y shell
. En el primero crearemos el registro para abrir un terminal en el directorio actual y el segundo nos servirá para cuando hagamos clic derecho sobre un directorio (y siempre que éste esté seleccionado).
Desplegad Background
y en shell
haced clic derecho / Nuevo / Clave y le ponéis un nombre como minTTYzsh
. En la columna de la derecha hacéis doble clic sobre (Predeterminado)
y escribís el texto que queráis mostrar en el menú contextual, yo tengo puesto «Obre zsh».
Si queréis añadirle un icono a la opción del menú desplegable, en la columna de la derecha hacéis clic derecho / Nuevo / Valor de cadena y como nombre le ponéis «Icon». Hacéis doble clic sobre él e indicáis la ruta hacia un icono o un ejecutable (.exe) que contenga iconos. Para indicar el índice de un icono (en caso de que el .ico o el .exe tenga múltiples iconos) tenéis que indicarlo separado de una coma: C:\\cygwin\\cygwin.ico,1
.
En nuestro caso indicaremos el icono de mintty, ya que es el ejecutable que utilizaremos como consola: C:\\cygwin\\bin\\mintty.exe
Haced clic derecho en el escritorio y podréis comprobar cómo aparece ya la opción creada en el menú contextual. Pero dicha opción no tiene comando asociado, así que vamos a creárselo.
En la columa de la izquiera del editor de registro de windows hacéis clic derecho sobre la clave creada anteriormente minTTYzsh
y seleccionáis Nuevo / Clave y le ponéis como nombre command
.
Después de hacer esto hacemos doble clic en el nombre de la columna de la derecha, que aparecerá como (Predeterminado). En el editor que nos aparecerá introducimos lo siguiente: C:\\cygwin\\bin\\mintty.exe --size=120,40 /bin/env CHERE_INVOKING=1 /bin/zsh -l
Haced clic derecho de nuevo en el escritorio y comprobad que funciona el enlace del menú contextual. Si habéis seguido los pasos con todo detalle debería de funcionar sin problemas.
Para añadir la entrada de registro que nos permitirá abrir la consola en un directorio seleccionado seguid los pasos de antes pero en lugar de crear la clave minTTYzsh
en Directory/Background/shell
deberéis crearla directamente en Directory/shell
y en el momento de indicar el comando a ejecutar tendréis que introducir lo siguiente:
C:\\cygwin\\bin\\mintty.exe --size=120,40 /bin/env /bin/xhere /bin/zsh '%L'
En el caso anterior también podríamos haber iniciado la consola indicando /bin/xhere
pero tengo la sensación que del otro modo es algo más rápido al cargar (notaréis que en este caso al ejecutar el terminal empieza con «Starting /bin/zsh
»)
El parámetro --size
lo indico para hacer algo más grande el terminal de minTTY ya que por defecto lo encuentro algo pequeño.
En todo caso, ya tenéis zsh con oh-my-zsh funcionando bajo windows y con la opción en los menús contextuales 😀
Update a 10 de enero de 2014: Acabo de encontrar en github un script en bash que debería instalar los paquetes necesarios en cygwin y configurarlo para que funcione con zsh. No lo he probado pero no pinta nada mal, podéis echarle un ojo desde aquí: https://github.com/haithembelhaj/oh-my-cygwin.
Update a 15 de febrero de 2014: En windows 8.1 he tenido problemas para lograr tener oh-my-zsh funcionando. El terminal estaba escupiendo un montón de código y me daba el error compdef: unknown command or service: git repetidas veces antes de, finalmente, mostrar el prompt. En este post he encontrado la solución y ha sido tan sencillo como hacer lo siguiente:
# accedemos a nuestro directorio home cd # listamos el directorio en busca del fichero .zcompdump ls -lha
Seguramente veáis un fichero llamado .zcompdump-VuestroUsuario
. Lo que está sucediendo es que, por motivos que desconozco, zsh va a buscar ese fichero en lugar de el fichero .zcompdump. Ahora que sabemos el nombre del fichero, solucionemos el problema:
compinit # zsh compinit: insecure directories, run compaudit for list. # Ignore insecure directories and continue [y] or abort compinit [n]? y cat .zcompdump > .zcompdump-VuestroUsuario
Aseguraros de que .zcompdump-VuestroUsuario
coincida exactamente con el fichero que antes habéis visto listado. Cerrad el terminal y volved a abrirlo y debería de estar solucionado.
Más información y fuentes: