Cuando estaba modificando ZSH, me di cuenta que el prompt starship, por el que estaba cambiando oh-my-zsh no mostraba el path de los archivos como a mi gustaba, es decir starship mostraba el path así: …/Actual/directorio/subcarpeta, mientras que el que me gustaba de oh-my-zsh lo mostraba de forma más corta, ese mismo ejemplo sería ~/Ac/di/subcarpeta, el cual se me hacía más corto y conciso, afortunadamente starship nos permite ejecutar cualquier comando y tener la salida en el prompt.

primero lo escribi en python como prueba de concepto:
#!/usr/bin/python
import os
path=os.getenv("PWD")
splited=path.split("/")[1:]
if os.getlogin()==splited[1]:
splited.pop(0)
splited[0]="~"
for i,_ in enumerate(splited[1:]):
splited[i]=splited[i][:2]
print("/".join(splited))
Pero seria tendria el problema de que seria igual algo lento y es en mi opinion es mucho cargar el interprete de python para solamente mostrar el directorio.
Por lo que mejor lo escribi en C y quedo de la siguiente manera:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
char HOME[] = "~";
#define MAX_LEN 2
int main() {
char path[1024];
char login[256];
getcwd(path, sizeof(path));
char *splited[1024];
char *token = strtok(path, "/");
int i = 0;
while (token != NULL) {
splited[i++] = token;
token = strtok(NULL, "/");
}
if (i < 2) {
printf("%s", path);
return 0;
}
getlogin_r(login, sizeof(login));
if (strcmp(login, splited[1]) == 0) {
splited[1] = HOME;
for (int j = 2; j < i - 1; j++) {
splited[j][MAX_LEN] = '\0';
}
for (int j = 1; j < i - 1; j++) {
printf("%s/", splited[j]);
}
printf("%s\n", splited[i - 1]);
return 0;
} else {
printf("/");
for (int j = 0; j < i - 1; j++) {
if (strlen(splited[j]) > 3)
splited[j][MAX_LEN] = '\0';
printf("%s/", splited[j]);
}
printf("%s\n", splited[i - 1]);
return 0;
}
}
Este programa en C hace específicamente eso, lee el directorio actual y le el formato que quería
En comparacion la version de python vs la version de C, el numero de instrucciones que cada uno ejecuta es la siguiente:
Versión Instrucciones CPU / ejecución
C ~217,600
Python ~1,057,330,000 (≈1.06 mil millones)