|
|
|
@ -1,11 +1,13 @@
|
|
|
|
|
function shorten_path
|
|
|
|
|
# shorten_path is a script to compress a path without sacrificing to much readibility
|
|
|
|
|
# It shortens each segment in a path to one character except the last
|
|
|
|
|
# It also replaces /home/user with ~ to save space
|
|
|
|
|
# e.g.:
|
|
|
|
|
# /path/to/somewhere → /p/t/somewhere
|
|
|
|
|
# some/relative/path → s/r/path
|
|
|
|
|
# singel_segment_path → singel_segment_path
|
|
|
|
|
# /path/with//empty/space → /p/w//e/space
|
|
|
|
|
# /home/user/test/123 → ~/t/123
|
|
|
|
|
|
|
|
|
|
# handle single segment paths (don't contain a slash)
|
|
|
|
|
if ! string match -q -- '*/*' $argv[1]
|
|
|
|
@ -13,8 +15,11 @@ function shorten_path
|
|
|
|
|
return
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
# replace /home/<username> with ~
|
|
|
|
|
set argv[1] (string replace -r "^$HOME" '~' "$argv[1]")
|
|
|
|
|
|
|
|
|
|
# split
|
|
|
|
|
set -l segments (string split '/' (string trim -r -c '/' $argv[1]))
|
|
|
|
|
set -l segments (string split '/' (string trim -r -c '/' "$argv[1]"))
|
|
|
|
|
|
|
|
|
|
# handle relative paths
|
|
|
|
|
if test -n "$segments[1]"
|
|
|
|
|