#!/usr/bin/env ruby # -*- ruby -*- # Script to smartly chop off portions of the current working directory for # use in the shell prompt # Constants used to decide when to start chopping DIRLIM = 5 DIR_L = 3 DIR_R = 2 PWDLEN = 14 def smartwd username = ENV['USER'] homedir = ENV['HOME'] pwd = ENV['PWD'] path = pwd.split('/') # Ignore the root path if (path.length > 0) index = path.index(username) if index prefix = path.shift(index + 1) # We need to map additional paths in environments where the user # may have more than one available folder in his/her name. if prefix.join('/') == homedir path.unshift('~') else # The first entry in the prefix array is the empty string pre = prefix[1].split('').shift(4).join('') + '~' path.unshift(pre) end else # Replace the first two entries in the array with / # (because the first entry is always empty string) prefix = path.shift(2).join('/') path.unshift(prefix) end # Check to make sure that both the DIRLIM and PWDLEN constraints # are met before splitting pwd = path.join('/') if path.length > DIRLIM and pwd.length > PWDLEN pwd_l = path.shift(DIR_L).join('/') pwd_r = path.pop(DIR_R).join('/') pwd = pwd_l + '/.../' + pwd_r end end print pwd end smartwd