Hace ya mucho que empecé en esto de la programación y, en un principio, lo que más me gustaba era programar aplicaciones y utilidades enfocadas a productividad en la consola de MS-DOS que era, básicamente, lo que se estilaba en aquellos tiempos. Después la carrera profesional me llevó por el desarrollo web y me alejé de ese tipo de aplicaciones.
Hace no mucho, me encontré con un pequeño problema que me suele ocurrir cuando en una consola estoy situado en un directorio muy profundo en el sistema ya que mi consola suele acortar la ruta completa.

La solución que se me ocurrió fue una pequeña utilidad en python que muestra, de manera, simplificada, un árbol donde se indica la ruta completa del directorio actual. El ejecutar la utilidad se ve más o menos así.

El código de esta pequeño utilidad es el siguiente:
#!/usr/bin/python3
import os
import pathlib
tree = []
def get_upper_dir(dir):
try:
dir = pathlib.Path(dir).parent.absolute()
if (os.path.basename(str(dir))) != '':
tree.append(str(dir))
get_upper_dir(dir)
else:
tree.append(str(dir))
except Exception as error:
pass
return tree
def draw_tree():
tree.reverse()
for index, dir in enumerate(tree):
cad = ''
if index:
cad += ' ' * (index - 1) + ' ' + u'\u2514' + u'\u2500' + os.path.basename(dir)
else:
cad = dir
print(cad)
if index < (len(tree) - 1):
print(' ' * index + ' ' + u'\u2502')
def app():
current_dir = os.getcwd()
tree.append(current_dir)
get_upper_dir(current_dir)
draw_tree()
if __name__ == '__main__':
app()
Pues bien, como llevo un tiempo trasteando con rust, me he decidido a portar esta utilidad a este lenguaje, quedando realmente más compacto. El código es tal que así:
use std::env::current_dir;
fn main() {
let dir = current_dir().unwrap();
for (index, partial) in dir.iter().enumerate() {
if index == 0 {
println!("{}", partial.to_str().unwrap())
} else {
println!("{}│"," ".repeat(index - 1));
println!("{}└─{}", " ".repeat(index - 1),partial.to_str().unwrap())
}
}
}
Y la salida de la ejecución es
