# ls.py - functions for listing file information # # Copyright (C) 2015 Arthur de Jong # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # The files produced as output from the software do not automatically fall # under the copyright of the software, unless explicitly stated otherwise. import stat import sys import time def supports_colors(stream): """Check whether the specified stream supports colors.""" if stream.isatty(): try: import curses curses.setupterm() return curses.tigetnum('colors') > 2 except: pass return False # see if stdout supports colors _stdout_colors = supports_colors(sys.stdout) def ls_format(info, use_colors=_stdout_colors): info['date'] = time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(info['mtime'])) mode = info.get('mode', 0) ftype = info.get('type', '?').lower() color = '' # get file type if ftype == 'd': color = '\x1b[01;34m' # blue elif ftype == 'l': color = '\x1b[01;36m' # cyan elif ftype == 'r': ftype = '-' if mode & (stat.S_IXGRP | stat.S_IXUSR | stat.S_IXOTH): color = '\x1b[01;32m' # green # build file permissions perms = '' for who in 'USR', 'GRP', 'OTH': for what in 'R', 'W', 'X': if mode & getattr(stat, 'S_I' + what + who): perms += what.lower() else: perms += '-' info['ftype'] = ftype info['perms'] = perms info['color'] = color if use_colors else '' info['endcolor'] = '\x1b[00m' if info['color'] else '' print(('%(ftype)s%(perms)s %(uid)-8s %(gid)-8s %(size)8d %(date)s ' + '%(color)s%(path)s%(endcolor)s') % info)