Hey folks, I just wanted to share a quick script I threw together called notational ls. One of the big problems of any code base (or any filesystem) is that it's hard to tell what's what - folder and file names often trade brevity for clarity.
So I thought about a version of `ls` that works like this:
> nls
web: Where python web server files are stored
ad_hoc: One time scripts
ios: Our IOS code
images
Adding descriptions is really easy too:
> nls images Images SHARED between both ios and web
web: Where python web server files are stored
ad_hoc: One time scripts
ios: Our IOS code
images: Images SHARED between both ios and web
So I whipped up said script in python and pushed it to github for all to use. Code is at https://github.com/newhouseb/nls, feel free to fork as you so please, but I must get back to real work. If there's enough interest it'd be great to turn this into a larger effort of improving the small things in our bash lives. If you're lazy, here's the source anyway (github has comments and sane spacing) - enjoy!
from subprocess import Popen, PIPE
import sys
files = Popen(["ls"], stdout=PIPE).communicate()[0].splitlines()
notes = {}
try:
nls_file = open('.nls').read().splitlines()
except IOError:
nls_file = []
for entry in nls_file:
file, note = entry.split(':', 1)
notes[file] = note
if len(sys.argv) > 1:
if len(sys.argv) == 2 and sys.argv[1] == 'bootstrap':
for file in files:
if file not in notes:
notes[file] = ''
elif sys.argv[1] in files:
notes[sys.argv[1]] = ' '.join(sys.argv[2:])
open('.nls','w').write(
'\n'.join([file+': '+note for file,note in notes.iteritems()]))
for file in files:
if file in notes:
print '\033[1m' + file + ':\033[0m ' + notes[file].strip()
else:
print '\033[1m' + file + '\033[0m'
Note: I know this code isn't perfect, but it was a quick job and is what came to mind first and, most importantly, works. If you want to improve it send me a pull request/fork it on github (this is REALLY easy now with github's recent updates).
Yet, controlling chatty output is something that is already done, with -v (verbosity) levels.
I wonder how much more usable UNIX would be, if -v was on by default, and there was some easy way to disable it when chaining tools.