mirror of https://github.com/nirenjan/dotfiles.git
				
				
				
			
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
| #!/usr/bin/env ruby
 | |
| # -*- ruby -*-
 | |
| # Script to smartly chop off portions of the current working directory for
 | |
| # use in the shell prompt
 | |
| 
 | |
| # Some of the methods don't work with Ruby versions older than 1.8.7
 | |
| min_release = "1.8.7 (2008-08-11)"
 | |
| ruby_release = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE})"
 | |
| 
 | |
| # Constants used to decide when to start chopping
 | |
| DIRLIM = 5
 | |
| DIR_L = 3
 | |
| DIR_R = 2
 | |
| PWDLEN = 14
 | |
| 
 | |
| def backslash_w
 | |
|   homedir = ENV['HOME']
 | |
|   pwd = ENV['PWD']
 | |
|   print pwd.gsub(homedir, '~')
 | |
| end
 | |
| 
 | |
| 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 /<entry1>
 | |
|       # (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
 | |
| 
 | |
| if (ruby_release < min_release)
 | |
|   backslash_w
 | |
| else
 | |
|   smartwd
 | |
| end
 | |
| 
 |