JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Crear una terminal de trabajo bonita para desarrolladores

Aunque el mundo está dominado por interfaces gráficas, en el submundo de los desarrolladores, la realidad es que lo que predomina son las herramientas de línea de comandos. En la actualidad necesitas usar herramientas de este tipo todo el tiempo, y en especial si te dedicas al desarrollo Web, gracias a la preponderancia de npm o Git. En cuanto es este último, aunque siempre que puedo utilizado la magnífica indispensable GitLense para Visual Studio Code, en cuanto hay que hacer algo un poco fuera de la normal, se hace necesario acudir a la línea de comandos.

En Windows, el sistema operativo que utilizo casi todo el rato, tenemos la suerte de disponer de varios intérpretes de comandos (o shell) que podemos elegir para trabajar, pero fundamentalmente los siguientes:

  • La línea de comandos clásica (CMD): heredada de MS-DOS y todavía vigente, pero antigua y con muchas limitaciones.
  • Windows PowerShell: la remozada y potente línea de comandos que lanzó Windows hace ya unos 15 años. Basada en .NET y con una potencia increíble, es la base de casi todas las herramientas de gestión de sistemas más o menos recientes de la multinacional de Redmond. EN su día hice un pequeño cursillo de iniciación que puedes encontrar aquí.
  • PowerShell Core: nombre de m**rda para la versión moderna y multiplataforma de PowerShell. Es de código abierto y funciona en un montón de sistemas operativos, pero fundamentalmente Windows, macOS y muchas variantes de Linux.. En el momento de escribir esto va por la versión 7, y la verdad es que está muy bien. Lo puedes descargar y ver su código fuente desde aquí. Lo puedes instalar de varias maneras diferentes.
  • Bash y los demás Shell de Linux: algo que mucha gente todavía no sabe es que Windows 10 incluye en su corazón el núcleo de Linux, desde hace casi 4 años. Ya os conté en su momento cómo ponerlo a funcionar, e incluso cómo usar aplicaciones gráficas también. Y en breve estará disponible para todo el mundo WSL2, el nuevo subsistema de Linux para Windows que tiene una mayor integración con el sistema y ofrece mayor rendimiento. Se puede decir que con Windows tienes dos sistemas operativos en uno gracias a esto. Puedes instalar unas cuantas distribuciones de Linux: Ubuntu, OpenSuse, Debian, Kali, Fedora, Apine... Sólo hay que buscarlas en la tienda de aplicaciones y listo. Yo suelo instalar Ubuntu 18.x.

Imagen de la primera pantalla de la instalación de PowerShell Core 7

Y por supuesto, la aplicación de terminal que debes utilizar hoy en día es sin duda Windows Terminal, la remozada línea de comandos del sistema que lleva varios meses en preview, que moderniza por fin a las vetustas terminales que teníamos hasta ahora y que soporta todos los shell del sistema sin problema.

Este es el aspecto de la terminal de mi portátil para PowerShell, PowerShell Core y Bash en Ubuntu:

Animación que muestra varias pestaás de Windows Terminal con varios terminales abiertos

Este no es, por supuesto, el aspecto por defecto.

Si te fijas, en este caso estoy dentro de una carpeta en la que hay un repositorio local de Git, y me está mostrando, aparte de la ruta actual en azul, la rama del repositorio en la que me encuentro en color verde. Esto quiere decir que no hay cambios pendientes en la rama. Si realizo cambios en mis archivos, mostrará un aspecto diferente y me indicará también cuántos archivos modificados y eliminados hay (en este caso 3 modificados y 0 eliminados):

Mi terminal Powershell mostrando cambios en mi repositorio

Vale, para conseguir esto hay que instalar varias cosas en tu sistema.

Lo primero que hay que hacer es instalar el nuevo terminal de Windows, que puedes instalar desde la tienda de aplicaciones de Microsoft (y además así se actualiza solo, mucho mejor) o si lo prefieres desde la zona de "Releases" de su repositorio de GitHub.

Este terminal tiene muchas pijadas, como transparecencias en las ventanas, pestañas, autodetección de todos los terminales y shells instalados en tu sistema, y por supuesto mucha capacidad de personalización, que necesitaremos para lograr lo de arriba.

Estos son los terminales que tengo yo instalados:

Terminales instalados: PowerShell, cmd, Azure Cloud Shell, PowerShell Core y Ubuntu 18.04

A continuación vamos a "maquear" PowerShell. Primero instalaremos una conocidísima utilidad llamada Posh-Git (que se traduce como Git "pijo"), que lleva unos diez años entre nosotros y que ha hecho más fácil la vida de muchos desarrolladores Windows. Lo que hace es añadir a nuestro prompt de PowerShell esa información que hemos visto antes sobre el estado de los repositorios Git que, si bien está genial, no es tan bonito como las imágenes que he puesto más arriba:

Aspecto por defecto de Posh-Git

Para instalarlo abrimos una línea de comandos de PowerShell (vale con cualquiera de los dos: el "clásico" o el "Core"):

Install-Module posh-git -Scope CurrentUser -AllowPrerelease -Force

Y listo.

Ahora vamos a la parte de ponerlo bonito. Para ello usaremos oh-my-posh, que es un motor de temas estéticos para PowerShell y que, como reconoce su propio creador, Jan De Dobbeleer, está inspirado fuertemente en el famoso oh-my-zsh de Unix de que hablaré en breve porque lo usaremos par Linux.

Para instalarlo, nuevamente, usaremos una línea de PowerShell:

Install-Module oh-my-posh -Scope CurrentUser

OJO: si estás instalándolo en PowerShell Core debes instalar también la utilidad PSReadline, que sustituye la utilidad de edición de línea PowerShell para añadirle muchas capacidades, más parecidas a lo que tiene bash en UNIX. Usa esta línea para instalarlo:

Install-Module -Name PSReadLine -AllowPrerelease -Scope CurrentUser -Force -SkipPublisherCheck

En este caso, sin embargo no llega con la instalación. Lo primero que tenemos que hacer es configurarlo, para lo cual debemos primero lanzarlo y luego al menos establecer el tema que nos guste de entre todos los disponibles:

Set-Prompt
Set-Theme Paradox

A mi de todos los que trae de serie me gustan Agnoster y Paradox que son muy parecidos. Elige el que te guste más a ti.

De todos modos esto sólo nos funcionará durante la sesión actual, y lo que queremos es hacer el uso de oh-my-posh permanente. Para ello lo que debemos hacer es editar nuestro perfil de PowerShell, que se encuentra especificado en el archivo C:\Users\<Usuario>\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1. Por suerte no tenemos ni que buscarlo ya que PowerShell cuenta con una variable global llamada $profile que muestra esa ruta, así que podemos lanzar cualquier editor de texto desde PowerShell para editarlo escribiendo, por ejemplo:

notepad.exe $profile

y dentro de este archivo, que inicialmente estará vacío, escribir lo siguiente:

Import-Module posh-git
Import-Module oh-my-posh
Set-Theme Paradox

como se ve en la figura:

Esto lo que hará será asegurarnos de que al iniciar PowerShell se cargan Posh-Git y oh-my-posh y que se establece el tema que nos guste.

Prueba CASI conseguida....

Nos queda un problema por resolver. Resulta que por defecto el aspecto que obtendremos será este:

Por defecto se ven cuadraditos en vez de los símbolos

Como puedes comprobar, en lugar de esas flechitas y símbolo tan monos que se ven en mis capturas, obtendrás unos antiestéticos e inútiles cuadrados.

El motivo es que por defecto la tipografía que utiliza la línea de comandos carece de algunos glifos (símbolos) que son los que hacen esas flechas y otros caracteres especiales que forman parte de lo que se llaman Powerline Glyhps.

Por defecto, ninguna de las tipografías que vienen con Windows los incluyen, por lo que tenemos que utilizar alguna otra. Ryan McIntyre, el creador de los PowerlIne Glyphs, de hecho, ha recoiplado y retocado para incluir los glifos en un montón de fuentes "nerd" que tiene en este repo. Las puedes ver mejor aquí, y si quieres puedes usar alguna de esas. Hasta tiene un script en Python para "parchear" una fuente que tengas y que te guste pero carezca de los símbolos.

De todos modos, por si quieres quedarte bajo los cánones que marca Microsoft, la empresa ha lanzado su propia fuente especialmente diseñada para Windows Terminal: Cascadia Code, que tiene una variante, CascadiaPL, con lo glifos que necesitamos. Descárgala, instálala en tu sistema (solo hay que hacer doble-clic sobre ella) y ya la tienes disponible. Yo es la que uso sólo por no ponerme a elegir una nueva entre todas las que tienen en Nerd Fonts (que seguro que las hay más chulas, peo el tiempo es oro).

Una vez instalada asígnala a la configuración de tus terminales en Windows Terminal pulsando el botón de configuración (el icono con el engranaje) y añadiendo a la definición de tus terminales lo siguiente:

"fontFace": "Cascadia Code PL"

Ajustes de terminal abiertos

De este modo se usará una fuente apropiada y lo veremos todo como es debido 😊

Rematar la jugada con Linux

Si además de PowerShell (que deberías) utilizas alguna terminal de Linux, tienes que llevar a cabo algunos pasos más.

No voy a entrar muy en detalle, puesto que sólo es necesario seguir las instrucciones según lo que quieras hacer, pero puedes instalar el clásico Oh My zsh, que implica sustituis bash por zsh, o puedes usar otras opciones.

Puedes instalar simplemente algún prompt específico que se parezca a lo que hemos hecho con PowerShell. Tenemos un par de opciones al menos:

  • Powerlne-Shell: escrito en Python y que modifica el prompt de bash, zsh y otros shells de Linux/macOS/UNIX.
  • PowerLine-Go que está inspirado a su vez en el anterior pero que usa el lenguaje Go de Google para lo mismo, y es por tanto súperrápido.

Yo, por ejemplo, utilizo este último. Para instalarlo solo hay que hacer:

sudo apt install golang-go
go get -u github.com/justjanne/powerline-go

que isnstala el lenguaje Go y el propio prompt Powerline-go. 

Luego sólo tenemos que tocar el archivo de configuración de bash (por ejemplo usando el editor nano: nano ~/.bashrc, en macOS se llama .profile) y añadirle las siguientes líneas:

function _update_ps1() {
PS1="$($GOPATH/bin/powerline-go -error $?)"
}

if [ "$TERM" != "linux" ] && [ -f "$GOPATH/bin/powerline-go" ]; then
PROMPT_COMMAND="_update_ps1; $PROMPT_COMMAND"
fi

De este modo conseguimos tener una funciobnalidad equivalente a la que habíamos conseguido en PowerShell. No te olvides de asignarle la tipografía con glifos de PowerLine en la configuración de Windows Terminal.

Ahora tu experiencia con la línea de comandos será mucho más agradable 😊

¡Espero que te resulte útil!

¿Este post te ha ayudado?, ¿has aprendido algo nuevo? Pues ¡ayúdame a ayudar a otros! No te costará nada y puedes conseguir premio. Es muy importante. Pulsa para saber más...
José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Agregar comentario