Cyber Monday Sale Save up to 40% off unlimited courses, tutorials and creative assets. Cyber Monday Sale! Save Now
Advertisement
  1. Code
  2. Tools & Tips

Como Personalizar el Indicador de Comando

by
Difficulty:IntermediateLength:LongLanguages:

Spanish (Español) translation by RRGG (you can also view the original English article)

Últimamente, he estado recibiendo mucho esta pregunta: "¿cómo conseguiste que tu terminal se vea como se ve?" Si has notado mi terminal y tienes curiosidad acerca de cómo lo configuré, ¡este es el tutorial para ti! Por supuesto, ¡lo que aprendas aquí será suficiente para comenzar a crear tu propio símbolo de comando personalizado, también!


Antes de empezar, quiero dejar algo muy claro. Ciertamente soy un entusiasta de la línea de comandos, pero no soy un profesional de la línea de comandos. Me siento como en casa en una terminal, pero estoy muy lejos de saberlo todo. Así que este es el trato: les mostraré cómo configuré mi terminal, pero eso no significa que podré explicar cada línea de código que veremos. Hay algunas cosas aquí que son como son solo porque eso es lo que funciona ... y no siempre sé al 100% por qué.

Con ese descargo de responsabilidad fuera del camino, veamos lo que estamos haciendo.


Conociendo el Producto Final

Así es como se ve mi línea de comandos:

Si no estás seguro de lo que estás viendo, déjame explicarte:

  • En el turquesa, tenemos el nombre de la computadora; En mi caso, eso es la nave nodriza. Eso es seguido por dos puntos.
  • A continuación, tenemos el directorio de trabajo, en un amarillo-naranja.
  • Si estamos en un repositorio de git, tenemos información sobre eso a continuación. Lo principal aquí es el nombre de la rama (master o tilt_in_post_class en la captura de pantalla). Además, si el directorio de trabajo está limpio, ese texto aparece en verde; De lo contrario, aparece en rojo.
  • Por último, tenemos un indicador de batería. Si los diez triángulos están todos verdes y rellenos, las cosas se encienden. A medida que se vacía la batería, los triángulos se vaciarán y eventualmente se volverán rojos. Por supuesto, si no estás en una computadora portátil como lo estoy yo, esto no será tan útil para ti.

Alistando el Ambiente

Ahora juntemos algunas piezas preliminares, antes de escribir realmente algunos scripts de shell.

Primero, está el esquema de color. Es posible que lo reconozca como el esquema de color Solarized de Ethan Schoonover. Es bastante sorprendente, y lo he usado tanto en el terminal como en Vim desde que lo descubrí. Si quieres usarlo en la Terminal, tendrás que instalar el tema. La Terminal en Snow Leopard no era compatible con xterm-256color, por lo que tendrás que seguir algunas instrucciones especiales en la página de GitHub Solarizado para que funcione si aún estás en ese sistema operativo.

Si se ha mudado a Lion, puede instalar los archivos .terminal que encontrará en la carpeta xterm-256color. Una vez que tenga los instalados (solo haga doble clic en ellos), debería poder seleccionar el que desea en las preferencias de Terminal. No te olvides de establecerlo como el esquema por defecto.

Lo siguiente que hay que saber es que no estoy usando el shell bash predeterminado en mi Terminal. En cambio, me cambié a zsh, que es básicamente muy compatible con bash, pero tiene algunas adiciones agradables, como una mejor terminación de pestañas. A continuación le indicamos cómo hacerlo: abra las preferencias del sistema Mac y vaya a "Usuarios y grupos". Desbloquee el panel haciendo clic en el candado en la parte inferior e ingresando su contraseña. Luego, haga clic con el botón derecho en su usuario en la lista y seleccione "Opciones avanzadas". En el campo "Shell de inicio de sesión", cambie de / bin / bash a / bin / zsh. Es así de simple.

Fuentes

Siguiente paso: obtener la fuente correcta. Estoy usando Inconsolata en 15pt. Es una fuente monoespacial gratuita que me encanta mirar todo el día. (Además de usarlo en la Terminal, lo uso en Vim y TextEdit). Puedes configurar tu fuente predeterminada desde las preferencias de la Terminal, donde eliges la combinación de colores.

Otra cosa pequeña es el tamaño de su ventana: Abra Preferencias de Terminal> Configuración y haga clic en la pestaña Ventana; parcialmente abajo, puede elegir el número de columnas y filas que desee; Yo uso 130 columnas por 30 filas.

Bateria

¿Recuerdas el indicador de nivel de batería? Bueno, eso requiere un pequeño script del desarrollador Steve Losh; simplemente cópielo en un archivo y guárdelo como un archivo python; como ~ / bin está en mi terminal PATH, he guardado el archivo en ~ / bin / batcharge.py. Como señala, esta secuencia de comandos solo funcionará en Mac OS X, por lo que si está ejecutando zsh en otro sistema, deberá omitir esta parte.

Zsh

Por último, pero ciertamente no menos importante, hay oh-my-zsh. De acuerdo con el repositorio de Github, esto es solo "Un puñado de funciones, auto-ayudantes completos y cosas que te hacen gritar" ¡OH MI ZSHELL! "

¿Por qué usarlo? Para mí, decidí probarlo en un momento dado y lo dejé instalado. Si usas mucho el terminal, pulsa un poco alrededor de oh-my-zsh cuando tengas tiempo. Puede que te sorprenda lo que encontrarás. Instalar oh-my-zsh es bastante simple: simplemente siga las instrucciones de configuración en el archivo README; Son bastante sencillos.

Ahora tenemos todas las partes necesarias en su lugar. Estamos listos para comenzar a crear nuestro terminal personalizado.


Creando los Archivos

Cuando instaló oh-my-zsh, se instaló en ~ / .oh-my-zsh. Pop que abrir. Verás dos carpetas de notas: temas y plantillas. Dentro de las plantillas, encontrará un archivo llamado zshrc.zsh-template Esta es una plantilla para usted ~ / .zshrc file. Si ha personalizado su terminal anteriormente, sabrá que el archivo .bashrc es donde se almacenan sus personalizaciones cuando está utilizando un shell bash. El .zshrc es la misma cosa, excepto el shell zsh. Así que abre ese archivo de plantilla; no tienes que saber qué es exactamente lo que está pasando; después de todo, hay muchos comentarios en el archivo que pueden no tener sentido. Una cosa aquí es importante de usar. Note la línea que dice esto:

Ese es el nombre del tema que tu terminal está usando. Busque en la carpeta de temas: verá un archivo robbyrussel.zsh-theme. Lo que vamos a hacer es crear un tema propio, para que pueda reemplazar esa cadena con el nombre de nuestro nuevo archivo. Increativamente, llamé al mío "doble" porque está en ambos lados de la terminal.

Cualquier otra personalización que desee realizar en su entorno zsh puede realizarse en este archivo. Si usas mucho el terminal, revisa los complementos de oh-my-zsh (en la carpeta de complementos): un montón de cosas útiles allí.

No olvide copiar a zshrc.zsh-template en su directorio de inicio y cambie su nombre a .zshrc antes de realizar los cambios. Ahora, en la carpeta de temas, cree un archivo con el nombre del tema que estableció en su archivo .zshrc. Asegúrate de darle la extensión .zsh-theme. Estamos listos para construir nuestro tema personalizado.


Construyendo el Tema Personalizado

Lo más importante en su archivo de tema es la variable PROMPT. Su contenido es su línea de comandos. Para tener una idea de esto, simplemente comience con esto en su archivo de tema:

Abra una nueva ventana de Terminal y debería ver esto:

Está bien, vamos a trabajar. Vamos a tener que escribir varias funciones, pero comenzaremos con la variable PROMPT. Es posible que no se note cuando se mira el terminal, pero en realidad hay tres líneas para mi aviso. La primera es una línea en blanco, solo para darme un respiro. El segundo tiene toda la información, y el tercero tiene la flecha. Esa tercera línea es donde realmente escribe el comando. Entonces, aquí está nuestro comienzo:

Sí, puede hacer cadenas multilínea que fácilmente en shell scripting. Pero, ¿qué pasa con $ reset_color? Esa es una variable que oh-my-zsh define para nosotros; restablece el color de la salida. Esto requiere un breve desvío para analizar cómo coloreamos las diferentes palabras en el indicador. Verá, hay un código, una serie de caracteres, que cambia el siguiente texto a un color. Obviamente, hay un código para cada color disponible. No te preocupes, hay otras variables para los otros colores; No tienes que aprender los códigos. Cuando lleguemos a la tercera línea, sin embargo, queremos restablecerlo al color de texto predeterminado; entonces, usamos la variable $ reset_color.

Si tienes curiosidad por el carácter de la flecha, es la flecha hacia la derecha de Unicode (U + 2192, & rarr;). Eso es todo.

Entonces, ahora nuestro mensaje se ve así:

Mirando esbelto. Ahora agreguemos el nombre de la computadora y el directorio de trabajo. Esto es todo para esa segunda línea de nuestra variable PROMPT.

Comenzamos por establecer el color del texto en cian; parece que estamos obteniendo ese código de color de una matriz asociativa o hash; Si bien no lo uso, hay un hash de $ bg que cambia el color de fondo en lugar del color de primer plano (texto).

Después de configurar el color, tenemos% m, esto genera el nombre de la computadora. Después de los dos puntos y el espacio, cambiamos el color del texto a amarillo. A continuación, usamos el signo de dólar y los paréntesis para agregar la salida de la función get_pwd. Esto dará salida a nuestro directorio de trabajo actual, estamos un poco torcidos. Si estoy en el directorio de inicio, no quiero ver / Users / andrew, quiero ver ~ en su lugar. Entonces, aquí está esa función:

La función shell es bastante sencilla si has escrito JavaScript anteriormente; sintaxis idéntica No estoy seguro de dónde se originó esa sintaxis de búsqueda y reemplazo, pero se ve bastante similar a la sintaxis de búsqueda y reemplazo de Vim: si PWD incluye el texto $ HOME (una variable del sistema para su directorio de inicio), reemplácelo con ~.

Ahora, aqui lo que sigue:

¡Bueno! Ahora viene la parte difícil. Verás, quiero alinear a la derecha la información de git y el indicador de batería. Dado que no hay forma de alinearlos correctamente, tenemos que contar el número de caracteres del texto que queremos, restarlo del ancho de la ventana y agregar ese espacio. Es bastante intrépido, y el código es bastante complicado, pero es todo lo que he podido encontrar que realmente funciona.

Listo? Insertamos el espaciado con una función que llamo get_spacing. Así que agregue $ (get_spacing) al final de nuestra segunda línea, para que ahora tenga este aspecto:

Ahora, esa funcion. Por supuesto, aqui esta el caparazon:

Hay cuatro partes dentro. Aqui esta la primera.

Comenzamos obteniendo la salida de la función git_prompt_info y almacenándola en una variable local, git. A continuación, si la longitud de esa cadena no es 0, restablecemos git para que ahora sea la longitud de la cadena menos 10. De lo contrario, restablecemos git a 0. Esto no parece tener mucho sentido, hasta que te das cuenta de lo que estamos tratando de hacer aquí. Queremos averiguar cuántos caracteres de "espacio" ocupa la información de git. La parte difícil es que estamos reutilizando la variable git: primero contiene la cadena, luego contiene el número que representa la cantidad de caracteres que nuestra información de git es larga. Si git tiene una longitud de cero caracteres, configuramos git en 0; si no lo está (lo que significa que estamos en un repositorio de git), establecemos git en el número de caracteres en la cadena, menos 10. Esto se debe a que el recuento de caracteres de la cadena incluye los códigos de color, que en realidad no son visibles, por lo que no ocupan ancho. Los parens dobles? Oh, se usan para hacer matemáticas.

Hacemos lo mismo para la salida de la batería:

En la tercera parte, averiguamos cuántos espacios necesitaremos:

Un poco más de matemáticas: comenzamos con COLUMNAS, que es el número de caracteres que el Terminal es ancho. Restamos todos los valores apropiados (el 3 es para dos espacios y dos puntos), y terminamos con el hecho de que necesitamos el número de espacios de ancho de término entre las partes izquierda y derecha del indicador.

Ahora, vamos a crear una cadena que tenga el número de espacios de ancho de término:

Un simple bucle de entrada nos permite crear la cadena; Entonces, lo devolvemos.

Realmente no se puede decir que se ha agregado el espacio en blanco, así que he agregado un texto ficticio para que pueda ver que se ha agregado.

A continuación, la información de Git. Agregamos $ (git_prompt_info) al final de la línea de solicitud 2; Como ustedes saben, eso es una llamada de función.

Tenga en cuenta que no cambiamos el color antes de cargar la información de Git: la función se encargará de eso, ya que depende del estado del repositorio.

Y aqui esta la funcion:

La primera línea solo comprueba si estamos en un repositorio Git. Si no estamos volvemos. Si lo estamos, la siguiente línea muestra la información correcta. Note dos cosas aquí: primero, estamos usando dos variables: $ ZSH_THEME_GIT_PROMPT_PREFIX y $ ZSH_THEME_GIT_PROMPT_SUFFIX. Te mostraré cómo se definen en un segundo. La otra cosa son otras dos funciones que se llaman. Estos son proporcionados por oh-my-zsh. La función current_branch solo devuelve la rama actual. Sin embargo, el parse_git_dirty es más interesante. Si la rama actual está sucia (tiene cambios no confirmados), la función generará $ ZSH_THEME_GIT_PROMPT_DIRTY; de lo contrario, generará $ ZSH_THEME_GIT_PROMPT_CLEAN.

Tengo estas cuatro variables definidas asi:

Basándose en estas variables, un repositorio en una rama maestra limpia mostrará [git: master] en verde; una rama maestra sucia generará + [git: master].

Y por último, llamamos a la función battery_charge:

Aquí está la función battery_charge:

Si el archivo existe, ejecutamos ese archivo y hacemos eco de la salida. Tenga en cuenta que usamos las comillas invertidas en la ejecución del archivo (no son comillas simples): esto nos permite ejecutar una cadena de código como si estuviera en el terminal. Si el archivo no existe, simplemente hacemos eco de una cadena vacía.

Y con eso, hemos terminado! Esto es lo que terminamos con:


Conclusion

Bueno, así es como se ve mi terminal. Bifurqué el proyecto oh-my-zsh en GitHub y agregué este tema, para que lo puedas encontrar allí. Si estás interesado en ver mis otros archivos de puntos, también los tengo en GitHub.

Sin embargo, no he terminado con mi configuración de línea de comandos todavía. Si bien no he realizado ningún cambio en un tiempo, estoy pensando en incluir el nombre del usuario actual (porque uso este mismo tema en mi servidor) y también algo de información de RVM. Además, no estoy seguro de por qué tengo la palabra git allí; Supongo que originalmente tenía una configuración que funcionaba con múltiples sistemas de control de versiones ... De todos modos, el punto de todo esto es que esto es algo que continuamente se estará modificando. Cuando realice cambios, me aseguraré de enviarlos a GitHub, para que puedas verlos allí.

Permítame dejarle varios enlaces que encontrará útiles para piratear en la línea de comandos:

¡Que te diviertas!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.